LogNet4学习笔记

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>
View Code

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     }
View Code

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     }
View Code

 

这样,当网站出错时,就会自动在网站目录的Log\LogError与LogInfo下写如文本日志。

LogNet4学习笔记,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。