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下写如文本日志。

 

你可能感兴趣的:(学习笔记)