日志记录类库log4net的使用总结
log4net是一个开源的日志记录类库,经过配置后可以自动抓取程序中的错误、异常信息,并写入磁盘,也可以在异常发生时执行其他指定的操作,比如:通知某人右键、写入数据库等。这里写个ASP.NET MVC4应用LogNet的Demo:
1.建立ASP.NET MVC4网站,在web.config中写入log4net的配置文件(就是添加两个节点)
<configuration>
<configSections>
<!-->需要添加第一个的节点<-->
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections> <!-->需要添加第二个的节点<-->
<log4net>
<!--错误日志配置 :其中name 可以程序员自己定义,但是这个名字一定要和 <logger name="logerror">下面的
<appender-ref ref="ErrorAppender"/> 中 ref的值保持一致
-->
<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件存储的位置是:Log\\LogError\\-->
<param name="File" value="Log\\LogError\\" />
<!--表示将内容以追加的形式,保存到日志文件中-->
<param name="AppendToFile" value="true" />
<!--每天的日志备份数可以有100个-->
<param name="MaxSizeRollBackups" value="100" />
<!--表示每个日志文件的大小只能是10M-->
<param name="MaxFileSize" value="10240" />
<!--文件名称是固定格式的-->
<param name="StaticLogFileName" value="false" />
<!--文件名称是固定格式为:yyyyMMdd-->
<param name="DatePattern" value="yyyyMMdd" />
<!--每天都是以yyyyMMdd来进行命名文件-->
<param name="RollingStyle" value="Date" />
<!--设定写入的日志格式-->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%n异常时间:%d [%t] %n异常级别:%-5p %n异 常 类:%c [%x] %n%m %n " />
</layout>
</appender>
<!--log4net.LogManager.GetLogger("logerror")用这个来选择这种类型-->
<!--additivity="false"表示错误记录只写入一次-->
<logger name="logerror" additivity="false">
<!--这个配置文件,如果配置成ALL:表示可以记录 1、信息日志(Info) 2、警告日志(Warn) 3、错误日志(Error)-->
<level value="ALL" />
<appender-ref ref="ErrorAppender" />
</logger>
<root>
<level value="ALL" />
<appender-ref ref="ErrorAppender" />
</root>
</log4net>
</configuration>
2.建立负责日志记录的LogHelper类
public class LogHelper
{
//通过配置文件的logerror 进行日志写入对象的实例化
public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror"); //选择<logger name="logerror">的配置 //public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo"); //选择<logger name="loginfo">的配置 static LogHelper()
{
SetConfig();
} /// <summary>
/// 初始化web.config中的<log4net>节点中的配置
/// </summary>
public static void SetConfig()
{
log4net.Config.XmlConfigurator.Configure();
} ///// <summary>
///// 设置自定义的Log4Net配置文件
///// </summary>
///// <param name="configFile"></param>
//public static void SetConfig(System.IO.FileInfo configFile)
//{
// log4net.Config.XmlConfigurator.Configure(configFile);
//} /// <summary>
/// 负责将信息日志写入到日志文件
/// </summary>
public static void WriteInfo(string msg)
{
//检查信息日志是否允许
if (logerror.IsInfoEnabled)
{
//表示写入信息级别的日志
logerror.Info(msg);
}
} /// <summary>
/// 负责将警告日志写入到日志文件
/// </summary>
public static void WriteWran(string msg)
{
if (logerror.IsWarnEnabled)
{
//表示写入警告级别的日志
logerror.Warn(msg);
}
} /// <summary>
/// 负责将错误日志写入到日志文件
/// </summary>
public static void WriteError(string msg)
{
if (logerror.IsErrorEnabled)
{
//表示写入异常级别的日志
logerror.Error(msg);
}
}
}
3.建立网站与log4net的联系,使log4net能够自动记录网站在运行时出现的异常
MVC4 版本:
/// <summary>
/// 新建一个继承HandleErrorAttribute的异常类,重写OnException(ExceptionContext filterContext)方法捕捉网站运行时出现的异常。
/// </summary>
public class MyExceptionAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
Exception exp = filterContext.Exception;
ViewResult view = new ViewResult();
view.ViewName = "/Views/Shared/Error.cshtml"; //新建一个视图对象,当网站出现异常时,跳转到自定义的错误页面
view.ViewData["Error"] = exp.Message;
filterContext.Result = view;
filterContext.ExceptionHandled = true; while (exp.InnerException != null)
{
exp = exp.InnerException;
} LogHelper.WriteError(exp.Message);
}
}
Asp.Net版本:通过在Global.asax的 Application_Error(Object sender, EventArgs e) 事件中,调用LogHelper类的方法来捕获网站异常记录
public class Global : System.Web.HttpApplication
{
void Application_End(object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码 } void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码 } void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。 } /// <summary>
/// 程序启动时配置log4net
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Application_Start(Object sender, EventArgs e)
{
//若不想把log4net配置文件写在web.config中,也可以另外手动指定。
//XmlConfigurator.Configure(new FileInfo(HttpContext.Current.Server.MapPath("~/App_Data/log4net.config")));
} /// <summary>
/// 程序出错时通过log4net写日志
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Application_Error(Object sender, EventArgs e)
{
Exception objExp = HttpContext.Current.Server.GetLastError();
LogHelper.WriteLog("\r\n客户机IP:" + Request.UserHostAddress
+ "\r\n错误地址:" + Request.Url
+ "\r\n异常信息:" + Server.GetLastError().Message, objExp);
}
}
4.关闭log4net日志记录功能
在配置文件web.config中找到节点<level value="ALL" />,将value值设置成比ERROR高的等级就不会记录日志。value值对应的等级如下:
OFF
FATAL
ERROR
WARN
INFO
DEBUG
ALL
由下往上,OFF优先级别最高,设置OFF就不再记录日志
日志记录类库log4net的使用总结的更多相关文章
- .NET日志记录之——log4net划重点篇
.NET日志记录之--log4net划重点篇 1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不 ...
- 日志记录组件[Log4net]详细介绍
转载:http://www.cnblogs.com/liwei6797/archive/2007/04/27/729679.html 因为工作中有要用到Log记录,找到一篇不错的文章,就转了过来. 一 ...
- ABP理论学习之日志记录
返回总目录 本篇目录 服务端 获取Logger 基类中的Logger 配置 客户端 服务端 ABP使用的是Castle Windsor的日志记录设备.它可以和不同的日志类库一起工作,比如Log4Net ...
- .NET Core 使用NLog日志记录
前言 每个项目都会需要使用到日志功能,这对于项目上线后 出现的bug异常,能及时定位和便于后期错误分析.那我们今天来看看在.NET Core中如何使用NLog日志. NLog 什么是NLog呢? NL ...
- 类库里面添加日志记录 log4net
第一步: 新建一个公共类库common,添加CustomLog4jLogger.cs 并引用log4net.dll /// <summary> /// 日志记录 /// </summ ...
- 也用 Log4Net 之将日志记录到数据库的后台实现 (二)
也用 Log4Net 之将日志记录到数据库的后台实现 (二) 大家下午好,昨天讲了配置,今天我们讲讲后台实现,在完成了后台实现后,我们才能真正意义上的解决把自定义属性字段值录入到数据库中. 在开写之 ...
- C# 利用Log4Net进行日志记录
概述 本文主要简单说明如何使用Log4Net进行日志记录,在程序开发过程中记录日志的优点: 它可以提供应用程序运行时的精确环境,可供开发人员尽快找到应用程序中的Bug: 一旦在程序中加入了Log 输出 ...
- 【转】使用Log4Net进行日志记录
首先说说为什么要进行日志记录.在一个完整的程序系统里面,日志系统是一个非常重要的功能组成部分.它可以记录下系统所产生的所有行为,并按照某种规范表达出来.我们可以使用日志系统所记录的信息为系统进行排错, ...
- Log4Net 之将日志记录到数据库的后台实现 (二)
原文:Log4Net 之将日志记录到数据库的后台实现 (二) 大家下午好,昨天讲了配置,今天我们讲讲后台实现,在完成了后台实现后,我们才能真正意义上的解决把自定义属性字段值录入到数据库中. 在开写之前 ...
随机推荐
- cocos2d之json使用实例
前端使用: json管理器中函数解析: 对宠物技能map的定义: 宠物技能表单--数据的基础定义:
- 烂泥:mysql5.5数据库cmake源码编译安装
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 以前也写过一篇有关mysql5.0源码编译的文章,该文章为<烂泥:mysql5.0数据库源码编译安装>.但是MySQL自5.5版本以后,就开 ...
- 数据结构杂谈(二)简单有趣的地精排序Gnome sort
很早之前便听说过地精排序的名字,今天自己看来一下,发现这是一种非常简单而且有趣的排序算法. 为什么叫地精排序? 地精排序在2000年由Dr. Hamid Sarbazi-Azad 提出的时候被称作 s ...
- 六、Android学习第五天——Handler的使用(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 六.Android学习第五天——Handler的使用 注意:有很多功能是不 ...
- jquery 获取设置值、添加元素详解
jQuery 获取内容和属性 jQuery DOM 操作 jQuery 中非常重要的部分,就是操作 DOM 的能力. jQuery 提供一系列与 DOM 相关的方法,这使访问和操作元素和属性变得很容易 ...
- Hyper-V架构与VMware ESXi的差异
微软的Hyper-V与VMware的ESXi在架构上有众多不同,然而很多虚拟化管理员并未意识到这些差异.而且很多管理员同样对Hyper-V是在主机操作系统上运行感到困惑. 有关微软Hyper-V的一个 ...
- 以后上午就只能这样了么-jQuery
hi 昨天睡得不错 为什么早上还是看不进论文,宁愿做这个,也不愿认真看论文.感觉上还是下午看论文感觉要好的多.不过最近有三十多篇要看哇...管球... 1.jQuery -----jQuery常用插件 ...
- 安装VS2013,可是电脑C盘没空间了,今天早上整理了下
安装VS2013,可是电脑C盘没空间了,今天早上整理了下 安装VS2013,要求C盘有11G的空闲空间,不然不让装, 咋天下好了安装文件,6.89G 今天早上一来, 首先把 一些软件删掉,装到了D盘, ...
- 多年前写的一个ASP.NET网站管理系统,到现在有些公司在用
多年前写的一个ASP.NET网站管理系统,到现在有些公司在用 今早上接到一个电话,自已多年前写的一个ASP.NET网站管理系统,一个公司在用,出了点问题, 第一点是惊奇,5,6年前的东东,手机号码换了 ...
- java 22 - 12 多线程之解决线程安全问题的实现方式1
从上一章知道了多线程存在着线程安全问题,那么,如何解决线程安全问题呢? 导致出现问题的原因: A:是否是多线程环境 B:是否有共享数据 C:是否有多条语句操作共享数据 上一章的程序,上面那3条都具备, ...