LogNet是一套开源的程序日志记录系统,经过配置后可以自动抓取程序中的错误、异常信息,并写入磁盘,也可以在异常发生时执行其他指定的操作,比如:通知某人右键、写入数据库等。
这里写个AspNet应用LogNet的Demo:
1.建立AspNet网站,在web.config中写LogNet的配置文件:
1 <?xml version="1.0"?> 2 <configuration> 3 <configSections> 4 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> 5 </configSections> 6 7 <log4net> 8 <!--错误日志配置--> 9 <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"> 10 <param name="File" value="Log\\LogError\\"/> <!--文件路径--> 11 <param name="AppendToFile" value="true"/> 12 <param name="MaxSizeRollBackups" value="100"/> 13 <param name="MaxFileSize" value="10240"/> 14 <param name="StaticLogFileName" value="false"/> 15 <param name="DatePattern" value="yyyyMMdd"/> 16 <param name="RollingStyle" value="Date"/> 17 <layout type="log4net.Layout.PatternLayout"> 18 <param name="ConversionPattern" value="%n异常时间:%d [%t] %n异常级别:%-5p %n异 常 类:%c [%x] %n%m %n "/> 19 </layout> 20 </appender> 21 <!--信息日志配置--> 22 <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender"> 23 <param name="File" value="Log\\LogInfo\\"/> <!--文件路径--> 24 <param name="AppendToFile" value="true"/> 25 <param name="MaxFileSize" value="10240"/> 26 <param name="MaxSizeRollBackups" value="100"/> 27 <param name="StaticLogFileName" value="false"/> 28 <param name="DatePattern" value="yyyyMMdd"/> 29 <param name="RollingStyle" value="Date"/> 30 <layout type="log4net.Layout.PatternLayout"> 31 <param name="ConversionPattern" value="%n日志时间:%d [%t] %n日志级别:%-5p %n日 志 类:%c [%x] %n%m %n"/> 32 </layout> 33 </appender> 34 <!--控制台--> 35 <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 36 <layout type="log4net.Layout.PatternLayout"> 37 <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline"/> 38 </layout> 39 </appender> 40 <!--log4net.LogManager.GetLogger("logerror")用这个来选择这种类型--> 41 <logger name="logerror"> 42 <level value="ERROR"/> 43 <appender-ref ref="ErrorAppender"/> 44 </logger> 45 <!--log4net.LogManager.GetLogger("loginfo")用这个来选择这种类型--> 46 <logger name="loginfo"> 47 <level value="INFO"/> 48 <appender-ref ref="InfoAppender"/> 49 </logger> 50 <root> 51 <level value="INFO"/> 52 <appender-ref ref="InfoAppender"/> 53 <appender-ref ref="ConsoleAppender"/> 54 </root> 55 </log4net> 56 <system.web> 57 <compilation debug="true"/></system.web></configuration>
2.建立日志记录Log类库,实现方法
1 /// <summary> 2 /// LogHelper的摘要说明。 3 /// </summary> 4 public class LogHelper 5 { 6 private LogHelper() 7 { 8 } 9 10 public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo"); //选择<logger name="loginfo">的配置 11 12 public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror"); //选择<logger name="logerror">的配置 13 14 15 /// <summary> 16 /// 默认配置。按配置文件 17 /// </summary> 18 public static void SetConfig() 19 { 20 log4net.Config.XmlConfigurator.Configure(); 21 } 22 23 /// <summary> 24 /// 手动设置,作用未知 25 /// </summary> 26 /// <param name="configFile"></param> 27 public static void SetConfig(FileInfo configFile) 28 { 29 log4net.Config.XmlConfigurator.Configure(configFile); 30 } 31 32 /// <summary> 33 /// 写信息。 34 /// </summary> 35 /// <param name="info"></param> 36 public static void WriteLog(string info) 37 { 38 if (loginfo.IsInfoEnabled) 39 { 40 loginfo.Info(info); 41 } 42 } 43 44 /// <summary> 45 /// 写日志。出错时会写入 46 /// </summary> 47 /// <param name="info"></param> 48 /// <param name="se"></param> 49 public static void WriteLog(string info, Exception se) 50 { 51 if (logerror.IsErrorEnabled) 52 { 53 logerror.Error(info, se); 54 } 55 } 56 }
3.在网站的Global.asax中配置网站与LogNet的联系。
1 public class Global : System.Web.HttpApplication 2 { 3 void Application_End(object sender, EventArgs e) 4 { 5 // 在应用程序关闭时运行的代码 6 7 } 8 9 void Session_Start(object sender, EventArgs e) 10 { 11 // 在新会话启动时运行的代码 12 13 } 14 15 void Session_End(object sender, EventArgs e) 16 { 17 // 在会话结束时运行的代码。 18 // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为 19 // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer 20 // 或 SQLServer,则不会引发该事件。 21 22 } 23 24 /// <summary> 25 /// 程序启动时配置lognet 26 /// </summary> 27 /// <param name="sender"></param> 28 /// <param name="e"></param> 29 protected void Application_Start(Object sender, EventArgs e) 30 { 31 //若不想把lognet配置文件写在web.config中,也可以另外手动指定。 32 //XmlConfigurator.Configure(new FileInfo(HttpContext.Current.Server.MapPath("~/App_Data/log4net.config"))); 33 } 34 35 /// <summary> 36 /// 程序出错时通过lognet写日志 37 /// </summary> 38 /// <param name="sender"></param> 39 /// <param name="e"></param> 40 protected void Application_Error(Object sender, EventArgs e) 41 { 42 Exception objExp = HttpContext.Current.Server.GetLastError(); 43 LogHelper.WriteLog("\r\n客户机IP:" + Request.UserHostAddress 44 + "\r\n错误地址:" + Request.Url 45 + "\r\n异常信息:" + Server.GetLastError().Message, objExp); 46 } 47 }
这样,当网站出错时,就会自动在网站目录的Log\LogError与LogInfo下写如文本日志。