log4net的使用详解
log4net是一个功能著名的开源日志记录组件。利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)中。并且我们还可以记载控制要记载的日志级别,可以记载的日志类别包括:FATAL(致命错误)、ERROR(一般错误)、WARN(警告)、INFO(一般信息)、DEBUG(调试信息)。要想获取最新版本的log4net组件库,可以到官方网站http://logging./log4net/下载。现在的最新版本是1.2.10。
下面的例子展示了如何利用log4net记录日志 。
首先从官方网站下载最近版本的log4net组件,现在的最新版本是1.2.10。在程序中我们只需要log4net.dll文件就行了,添加对log4net.dll的引用,就可以在程序中使用了。
接着我们配置相关的配置文件(WinForm对应的是*.exe.config,WebForm对应的是*.config),本实例中是控制台应用程序,配置如下(附各配置的说明):
view plaincopy to clipboardprint?
01.<?xml version="1.0" encoding="utf-8" ?> 02.<configuration> 03. <configSections> 04. <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/> 05. </configSections> 06. <appSettings> 07. </appSettings> 08. <log4net> 09.<!--RollingFileAppender自动截断--> 10. <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 11. <file value="log\\log.txt"/> 12. <appendToFile value="true"/> 13. <maxSizeRollBackups value="10"/> 14. <maximumFileSize value="2048KB"/> 15. <rollingStyle value="Size"/> 16. <staticLogFileName value="true"/> 17. <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> 18. <layout type="log4net.Layout.PatternLayout"> 19. <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/> 20. </layout> 21. </appender> 22. <!--定义输出到文件中--> 23. <appender name="LogFileAppender" type="log4net.Appender.FileAppender"> 24. <!--定义文件存放位置--> 25. <file value="logs.txt" /> 26. <appendToFile value="true" /> 27. <rollingStyle value="Date" /> 28. <datePattern value="yyyyMMdd-HH:mm:ss" /> 29. <layout type="log4net.Layout.PatternLayout"> 30. <!--每条日志末尾的文字说明--> 31. <footer value="by author" /> 32. <!--输出格式--> 33. <!--样例:2010-01-06 13:42:32,111 [10] INFO Log4NetDemo.MainClass [(null)] - info--> 34. <conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" /> 35. </layout> 36. </appender> 37. <!--定义输出到控制台命令行中--> 38. <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 39. <layout type="log4net.Layout.PatternLayout"> 40. <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 41. </layout> 42. </appender> 43. <!--定义输出到windows事件中--> 44. <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender"> 45. <layout type="log4net.Layout.PatternLayout"> 46. <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 47. </layout> 48. </appender> 49. <!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为C盘的log4net.mdb--> 50. <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender"> 51. <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=log4net.mdb" /> 52. <commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" /> 53. <!--定义各个参数--> 54. <parameter> 55. <parameterName value="@logDate" /> 56. <dbType value="String" /> 57. <size value="240" /> 58. <layout type="log4net.Layout.PatternLayout"> 59. <conversionPattern value="%date" /> 60. </layout> 61. </parameter> 62. <parameter> 63. <parameterName value="@thread" /> 64. <dbType value="String" /> 65. <size value="240" /> 66. <layout type="log4net.Layout.PatternLayout"> 67. <conversionPattern value="%thread" /> 68. </layout> 69. </parameter> 70. <parameter> 71. <parameterName value="@logLevel" /> 72. <dbType value="String" /> 73. <size value="240" /> 74. <layout type="log4net.Layout.PatternLayout"> 75. <conversionPattern value="%level" /> 76. </layout> 77. </parameter> 78. <parameter> 79. <parameterName value="@logger" /> 80. <dbType value="String" /> 81. <size value="240" /> 82. <layout type="log4net.Layout.PatternLayout"> 83. <conversionPattern value="%logger" /> 84. </layout> 85. </parameter> 86. <parameter> 87. <parameterName value="@message" /> 88. <dbType value="String" /> 89. <size value="240" /> 90. <layout type="log4net.Layout.PatternLayout"> 91. <conversionPattern value="%message" /> 92. </layout> 93. </parameter> 94. </appender> 95. <!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。--> 96. <root> 97. <!--文件形式记录日志--> 98.<appender-ref ref="RollingFileAppender" /> 99. <!--<appender-ref ref="LogFileAppender" />--> 100. <!--控制台控制显示日志--> 101. <appender-ref ref="ConsoleAppender" /> 102. <!--Windows事件日志--> 103. <appender-ref ref="EventLogAppender" /> 104. <!-- 105. <appender-ref ref="AdoNetAppender_Access" /> 106. --> 107. </root> 108. </log4net> 109.</configuration> <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/> </configSections> <appSettings> </appSettings> <log4net> <!--RollingFileAppender自动截断--> <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="log\\log.txt"/> <appendToFile value="true"/> <maxSizeRollBackups value="10"/> <maximumFileSize value="2048KB"/> <rollingStyle value="Size"/> <staticLogFileName value="true"/> <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/> </layout> </appender> <!--定义输出到文件中--> <appender name="LogFileAppender" type="log4net.Appender.FileAppender"> <!--定义文件存放位置--> <file value="logs.txt" /> <appendToFile value="true" /> <rollingStyle value="Date" /> <datePattern value="yyyyMMdd-HH:mm:ss" /> <layout type="log4net.Layout.PatternLayout"> <!--每条日志末尾的文字说明--> <footer value="by author" /> <!--输出格式--> <!--样例:2010-01-06 13:42:32,111 [10] INFO Log4NetDemo.MainClass [(null)] - info--> <conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" /> </layout> </appender> <!--定义输出到控制台命令行中--> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <!--定义输出到windows事件中--> <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为C盘的log4net.mdb--> <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender"> <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=log4net.mdb" /> <commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" /> <!--定义各个参数--> <parameter> <parameterName value="@logDate" /> <dbType value="String" /> <size value="240" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date" /> </layout> </parameter> <parameter> <parameterName value="@thread" /> <dbType value="String" /> <size value="240" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%thread" /> </layout> </parameter> <parameter> <parameterName value="@logLevel" /> <dbType value="String" /> <size value="240" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%level" /> </layout> </parameter> <parameter> <parameterName value="@logger" /> <dbType value="String" /> <size value="240" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%logger" /> </layout> </parameter> <parameter> <parameterName value="@message" /> <dbType value="String" /> <size value="240" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%message" /> </layout> </parameter> </appender> <!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。--> <root> <!--文件形式记录日志--> <appender-ref ref="RollingFileAppender" /> <!--<appender-ref ref="LogFileAppender" />--> <!--控制台控制显示日志--> <appender-ref ref="ConsoleAppender" /> <!--Windows事件日志--> <appender-ref ref="EventLogAppender" /> <!-- <appender-ref ref="AdoNetAppender_Access" /> --> </root> </log4net> </configuration> 测试代码
view plaincopy to clipboardprint?
01.using System; 02.using System.Collections.Generic; 03.using System.Text; 04.using System.Windows.Forms; 05.using System.Reflection; 06.using log4net; 07.//注意下面的语句一定要加上,指定log4net使用.config文件来读取配置信息 08.//如果是WinForm(假定程序为MyDemo.exe,则需要一个MyDemo.exe.config文件) 09.//如果是WebForm,则从web.config中读取相关信息 10.[assembly: log4net.Config.XmlConfigurator(Watch = true)] 11.namespace Log4NetDemo 12.{ 13. /// <summary> 14. /// 说明:本程序演示如何利用log4net记录程序日志信息。log4net是一个功能著名的开源日志记录组件。 15. /// 利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库中(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)。 16. /// </summary> 17. public class MainClass 18. { 19. public static void Main(string[] args) 20. { 21. //Application.Run(new MainForm()); 22. //创建日志记录组件实例 23. ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 24. //记录错误日志 25. log.Error("error",new Exception("发生了一个异常")); 26. //记录严重错误 27. log.Fatal("fatal",new Exception("发生了一个致命错误")); 28. //记录一般信息 29. log.Info("info"); 30. //记录调试信息 31. log.Debug("debug"); 32. //记录警告信息 33. log.Warn("warn"); 34. Console.WriteLine("日志记录完毕。"); 35. Console.Read(); 36. } 37. } 38.} using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Reflection; using log4net; //注意下面的语句一定要加上,指定log4net使用.config文件来读取配置信息 //如果是WinForm(假定程序为MyDemo.exe,则需要一个MyDemo.exe.config文件) //如果是WebForm,则从web.config中读取相关信息 [assembly: log4net.Config.XmlConfigurator(Watch = true)] namespace Log4NetDemo { /// <summary> /// 说明:本程序演示如何利用log4net记录程序日志信息。log4net是一个功能著名的开源日志记录组件。 /// 利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库中(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)。 /// </summary> public class MainClass { public static void Main(string[] args) { //Application.Run(new MainForm()); //创建日志记录组件实例 ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); //记录错误日志 log.Error("error",new Exception("发生了一个异常")); //记录严重错误 log.Fatal("fatal",new Exception("发生了一个致命错误")); //记录一般信息 log.Info("info"); //记录调试信息 log.Debug("debug"); //记录警告信息 log.Warn("warn"); Console.WriteLine("日志记录完毕。"); Console.Read(); } } } 下面是便是强大的LogHelper类,如果用于web,注意记得在global.asax里面调用LogHelper里的init初始化方法。
view plaincopy to clipboardprint?
01.using System; 02.using System.Collections.Generic; 03.using System.Text; 04.using log4net; 05.[assembly: log4net.Config.XmlConfigurator(Watch = true)] 06.namespace The9web.Common 07.{ 08. public class LogHelper 09. { 10. /// <summary> 11. /// 静态类 12. /// </summary> 13. private LogHelper() { } 14. private const string LOG_REPOSITORY = "Default"; // this should likely be set in the web config. 15. private static ILog m_log; 16. /// <summary> 17. /// 初始化日志系统 18. /// 在系统运行开始初始化 19. /// Global.asax Application_Start内 20. /// </summary> 21. public static void Init() 22. { 23. log4net.Config.XmlConfigurator.Configure(); 24. } 25. /// <summary> 26. /// 写入日志 27. /// </summary> 28. /// <param name="message">日志信息</param> 29. /// <param name="messageType">日志类型</param> 30. public static void Write(string message, LogMessageType messageType) 31. { 32. DoLog(message, messageType, null, Type.GetType("System.Object")); 33. } 34. /// <summary> 35. /// 写入日志 36. /// </summary> 37. /// <param name="message">日志信息</param> 38. /// <param name="messageType">日志类型</param> 39. /// <param name="type"></param> 40. public static void Write(string message, LogMessageType messageType, Type type) 41. { 42. DoLog(message, messageType, null, type); 43. } 44. /// <summary> 45. /// 写入日志 46. /// </summary> 47. /// <param name="message">日志信息</param> 48. /// <param name="messageType">日志类型</param> 49. /// <param name="ex">异常</param> 50. public static void Write(string message, LogMessageType messageType, Exception ex) 51. { 52. DoLog(message, messageType, ex, Type.GetType("System.Object")); 53. } 54. /// <summary> 55. /// 写入日志 56. /// </summary> 57. /// <param name="message">日志信息</param> 58. /// <param name="messageType">日志类型</param> 59. /// <param name="ex">异常</param> 60. /// <param name="type"></param> 61. public static void Write(string message, LogMessageType messageType, Exception ex, 62. Type type) 63. { 64. DoLog(message, messageType, ex, type); 65. } 66. /// <summary> 67. /// 断言 68. /// </summary> 69. /// <param name="condition">条件</param> 70. /// <param name="message">日志信息</param> 71. public static void Assert(bool condition, string message) 72. { 73. Assert(condition, message, Type.GetType("System.Object")); 74. } 75. /// <summary> 76. /// 断言 77. /// </summary> 78. /// <param name="condition">条件</param> 79. /// <param name="message">日志信息</param> 80. /// <param name="type">日志类型</param> 81. public static void Assert(bool condition, string message, Type type) 82. { 83. if (condition == false) 84. Write(message, LogMessageType.Info); 85. } 86. /// <summary> 87. /// 保存日志 88. /// </summary> 89. /// <param name="message">日志信息</param> 90. /// <param name="messageType">日志类型</param> 91. /// <param name="ex">异常</param> 92. /// <param name="type">日志类型</param> 93. private static void DoLog(string message, LogMessageType messageType, Exception ex, 94. Type type) 95. { 96. m_log = LogManager.GetLogger(type); 97. switch (messageType) 98. { 99. case LogMessageType.Debug: 100. LogHelper.m_log.Debug(message, ex); 101. break; 102. case LogMessageType.Info: 103. LogHelper.m_log.Info(message, ex); 104. break; 105. case LogMessageType.Warn: 106. LogHelper.m_log.Warn(message, ex); 107. break; 108. case LogMessageType.Error: 109. LogHelper.m_log.Error(message, ex); 110. break; 111. case LogMessageType.Fatal: 112. LogHelper.m_log.Fatal(message, ex); 113. break; 114. } 115. } 116. /// <summary> 117. /// 日志类型 118. /// </summary> 119. public enum LogMessageType 120. { 121. /// <summary> 122. /// 调试 123. /// </summary> 124. Debug, 125. /// <summary> 126. /// 信息 127. /// </summary> 128. Info, 129. /// <summary> 130. /// 警告 131. /// </summary> 132. Warn, 133. /// <summary> 134. /// 错误 135. /// </summary> 136. Error, 137. /// <summary> 138. /// 致命错误 139. /// </summary> 140. Fatal 141. } 142. } 143.} 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kevonz/archive/2010/01/09/5159429.aspx |
|