日志记录类库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 之将日志记录到数据库的后台实现 (二) 大家下午好,昨天讲了配置,今天我们讲讲后台实现,在完成了后台实现后,我们才能真正意义上的解决把自定义属性字段值录入到数据库中. 在开写之前 ...
 
随机推荐
- Mysql中使用find_in_set函数查找字符串
			
mysql有个表的字段的存储是以逗号分隔的,如domain字段login.s01.yy.com,s01.yy.com,s02.yy.com.现在要查找s01.yy.com这个.我们用like查找好像不 ...
 - STM32学习笔记——USART串口
			
转载自:http://www.cnblogs.com/microxiami/p/3752715.html 一.USART简介 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异 ...
 - 图灵机器人(问答机器人)API调用示例
			
问答机器人API文档:https://www.juhe.cn/docs/api/id/112 先上图: 说下大致实现的步骤: 1.首先使用了聚合数据的sdk,这样免费使用的数目可以多一些 2.使用gs ...
 - [转]ORA-01034: ORACLE not available如何解决
			
本文转自:http://www.cnblogs.com/zhwl/p/3726003.html 一个小小的问题,让我折腾了一个上午,下午三点彻底解决了,分享一个给大家解决方法,尽管在测试服务器上,但是 ...
 - 基于Bootstrap的DropDownList的JQuery组件的完善版
			
在前文 创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件 中,实现了DropDownList的JQuery组件,但是留有遗憾.就是当下拉菜单出现滚动条的时候,滚动条会覆 ...
 - CKEDITOR最新版不能上传图片的解决
			
文献:http://bbs.csdn.net/topics/390883077 代码例子:http://download.csdn.net/download/itmyhome/7851265 1.原先 ...
 - HDU3535AreYouBusy[混合背包 分组背包]
			
AreYouBusy Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
 - jmeter beanshell内容
			
byte [] sampledata = ctx.getPreviousResult().getResponseData(); String smapledatastring = new Strin ...
 - bzoj3223 文艺平衡树 (treap or splay分裂+合并)
			
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 3313 Solved: 1883 [Submit][S ...
 - samsung Galaxy s2(GT i9100g )刷机升级至4.4小记
			
从昨天上午到现在,大部分时间都是在将i9100g更新到4.4.虽然中途也做了一些别的事情,但是更新过程还是走了一点弯路,比开始预想的稍微慢了一点,现在将完整的更新步骤分享给大家,以帮助后来的同学.升级 ...