Log4Net笔记(一)基础(转)
最近在好好整理些小组件的使用,本文就Log4Net的使用做一个简单的说明。
准备工作
首先下载log4net相关资源:http://logging.apache.org/log4net/download.html
本文中还使用了NUnit。
log4net的组成
log4net主要由Logger、Appender、Repository、Layout
1)Logger
Logger是log4net主要部分,是来产生日志消息。在log4net中提供了LogManager类来产生ILog:
1.LogManager.GetLogger(LogName)在ILog提供了:Erro、Info、Debug、Warn四个重载方法来记录日志。
2)Appender
Appender是用来产生日志生成的目的地。Log4Net可以将消息生成到多个目的地,可以轻松通过配置多种Appender组件来实现,当必要的时候我们也可以通过扩张Appender来实现我们需要的截至方式。
3)Repository
Respository用户维护日志对象的结构。除非我们需要扩展log4net时,一般时候是不会用到Respository组件。
4)Layout
Layout是格式化消息输出形式的组件。Layout提供给我们了灵活而又简单消息格式化方式。
log4net消息的级别
| 级别 | 对应方法 |
| OFF | |
| Fatal | void Fatal(…) |
| Error | void Error(…) |
| Warn | void Warn(…) |
| Info | void Info(…) |
| Debug | void Debug(…) |
| All |
消息的级别按照上面的表格由上到下,由高到底的顺序,即OFF>Fatal>Error>Warn>Info>Debug>All。我们可以通过这样的消息的级别进行消息在Appender时进行行AppenderFiter。
配置
log4net的配置可以通过放在新的文件中或者放在程序的配置文件中。而log4net会通过AppDomain.CurrentDomain.BaseDirectory目录下的查找配置文件。<log4net>是log4net查找的标识。先来看我们应用程序的一个配置:
001.<?xml version="1.0" encoding="utf-8" ?> 002.<log4net> 003. <appender name="LogAllToFile" type="log4net.Appender.FileAppender"> 004. <file value="G:\学习资料\Log4Net\Log4NetDemo\Log4NetDemo\bin\Debug\DemoLog.log"/> 005. <appendToFile value="true"/> 006. <!--<layout type="log4net.Layout.PatternLayout"> 007. <conversionPattern value="%d [%t] %-5l - %m%n%n"/> 008. </layout>--> 009. <layout type="HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils"> 010. <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %SysMessage%newline" /> 011. </layout> 012. </appender> 013. <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 014. <param name="File" value="log/system_log_"/> 015. <param name="AppendToFile" value="true"/> 016. <param name="MaxSizeRollBackups" value="100"/> 017. <param name="MaximumFileSize" value="1KB"/> 018. <param name="StaticLogFileName" value="false"/> 019. <param name="DatePattern" value="yyyyMMdd".log""/> 020. <param name="RollingStyle" value="Date"/> 021. <!--<layout type="log4net.Layout.PatternLayout"> 022. <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 023. </layout>--> 024. <layout type="HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils"> 025. <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %SysMessage%newline" /> 026. </layout> 027. </appender> 028. <appender name="ConsoleAppender"029. type="log4net.Appender.ConsoleAppender" > 030. <layout type="log4net.Layout.PatternLayout"> 031. <param name="ConversionPattern"032. value="%d [%t] %-5p %c [%x] - %m%n"/> 033. </layout> 034. </appender> 035. 036. 037. <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender"> 038. <!--BufferSize为缓冲区大小--> 039. <param name="BufferSize" value="1" /> 040. <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 041. <connectionString value="database=HJRightPlat;server=(local);User ID=sa;Password=123456;" /> 042. <commandText value="INSERT INTO Sys_Log ([Date],[Thread],[Log_Level],[Logger],[Message],[Exception],[User],[Category],[URL],[Client_IP]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception,@User,@Category,@URL,@ClientIp)" /> 043. <parameter> 044. <parameterName value="@log_date" /> 045. <dbType value="DateTime" /> 046. <layout type="log4net.Layout.RawTimeStampLayout" /> 047. </parameter> 048. <parameter> 049. <parameterName value="@thread" /> 050. <dbType value="String" /> 051. <size value="255" /> 052. <layout type="log4net.Layout.PatternLayout"> 053. <conversionPattern value="%thread" /> 054. </layout> 055. </parameter> 056. <parameter> 057. <parameterName value="@log_level" /> 058. <dbType value="String" /> 059. <size value="50" /> 060. <layout type="log4net.Layout.PatternLayout"> 061. <conversionPattern value="%level" /> 062. </layout> 063. </parameter> 064. <parameter> 065. <parameterName value="@logger" /> 066. <dbType value="String" /> 067. <size value="255" /> 068. <layout type="log4net.Layout.PatternLayout"> 069. <conversionPattern value="%logger" /> 070. </layout> 071. </parameter> 072. <parameter> 073. <parameterName value="@message" /> 074. <dbType value="String" /> 075. <size value="4000" /> 076. <layout type="HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils"> 077. <conversionPattern value="%SysMessage" /> 078. </layout> 079. </parameter> 080. <parameter> 081. <parameterName value="@exception" /> 082. <dbType value="String" /> 083. <size value="2000" /> 084. <layout type="log4net.Layout.ExceptionLayout" /> 085. </parameter> 086. <parameter> 087. <parameterName value="@User" /> 088. <dbType value="String" /> 089. <size value="50" /> 090. <layout type="HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils"> 091. <conversionPattern value="%UserName" /> 092. </layout> 093. </parameter> 094. <parameter> 095. <parameterName value="@Category" /> 096. <dbType value="String" /> 097. <size value="50" /> 098. <layout type="HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils"> 099. <conversionPattern value="%Category" /> 100. </layout> 101. </parameter> 102. <parameter> 103. <parameterName value="@URL" /> 104. <dbType value="String" /> 105. <size value="50" /> 106. <layout type="HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils"> 107. <conversionPattern value="%SysURL" /> 108. </layout> 109. </parameter> 110. <parameter> 111. <parameterName value="@ClientIp" /> 112. <dbType value="String" /> 113. <size value="50" /> 114. <layout type="HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils"> 115. <conversionPattern value="%ClientIP" /> 116. </layout> 117. </parameter> 118. </appender> 119. 120. 121. 122. <root> 123. <priority value="ALL"/> 124. <!-- ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF--> 125. <appender-ref ref="LogAllToFile"/> 126. <appender-ref ref="ConsoleAppender"/> 127. <appender-ref ref="RollingLogFileAppender"/> 128. <appender-ref ref="ADONetAppender"/> 129. </root> 130.</log4net>在上面的配置中我们使用了ADONetAppender、LogAllToFile、ConsoleAppender、RollingLogFileAppender四种appender,其中ADONetAppderder中我们使用了些扩展,在后面会详细进行说明。下面说说各个配置节点:
1)Root:在Root中我们可以来指定消息级别,在上面种我们指定为“ALL”,同时我们也可以指定Appender的引用对象。
2)Appender:我们通过Appender配置节点来指定对应的各种方式的Appender,Appender节点可以是多种的。
应用
首先来看我们定义了一个系统消息的实体:
01.public class SysLogMessage 02.{ 03. /// <summary> 04. /// 用户名 05. /// </summary> 06. public string UserName 07. { 08. get; 09. set; 10. } 11. /// <summary> 12. /// 分类 13. /// </summary> 14. public string Category 15. { 16. get; 17. set; 18. } 19. /// <summary> 20. /// 访问的Web地址 21. /// </summary> 22. public string URL 23. { 24. get; 25. set; 26. } 27. /// <summary> 28. /// 客户端IP 29. /// </summary> 30. public string Client_IP 31. { 32. get; 33. set; 34. } 35. /// <summary> 36. /// 消息记录 37. /// </summary> 38. public string Message 39. { 40. get; 41. set; 42. } 43.}用单件模式定义了一个消息的管理类:
1. 01.public class SysLogManager 02.{ 03. #region Thread-safe, lazy Singleton 04. SysLogManager() { this.InitLogManager(); } 05. public static SysLogManager Instance { 06. get { 07. return Nested.LogManager; 08. } 09. } 10. private class Nested { 11. static Nested() { } 12. internal static readonly SysLogManager LogManager = new SysLogManager(); 13. } 14. private void InitLogManager() 15. { 16. XmlConfigurator.Configure(BaseDataCache.log4netConfig); 17. _Log = LogManager.GetLogger(LogName); 18. 19. } 20. #endregion 21. #region Help Methods And Fileds 22. ILog _Log; 23. string LogName = "HJRightLog"; 24. #endregion 25. public void Erro(SysLogMessage msg) 26. { 27. _Log.Error(msg); 28. } 29. public void Erro(SysLogMessage msg, Exception e) 30. { 31. _Log.Error(msg, e); 32. } 33. public void Info(SysLogMessage msg) 34. { 35. _Log.Info(msg); 36. } 37. public void Info(SysLogMessage msg, Exception e) 38. { 39. _Log.Info(msg, e); 40. } 41. public void Debug(SysLogMessage msg) 42. { 43. _Log.Debug(msg); 44. } 45. public void Debug(SysLogMessage msg, Exception e) 46. { 47. _Log.Debug(msg, e); 48. } 49. public void Warn(SysLogMessage msg) 50. { 51. _Log.Warn(msg); 52. } 53. public void Warn(SysLogMessage msg, Exception e) 54. { 55. _Log.Warn(msg, e); 56. } 57.}看看测试代码:
01.[Test] 02.public void TestLogErro() 03.{ 04. _logM.Erro(new SysLogMessage{ 05. Message="测试", 06. UserName="Henllyee", 07. Category="Debug", 08. URL="http://henllyee.cnblogs.com"09. }); 10. 11.}结果:
ConsleAppender:
RollingLogFileAppender:
AdoNetAppender:
总结
本文中概括地介绍了下log4net的使用,在下篇的文章中将会详细说明下多个常用的Appender。
转自:http://www.cnblogs.com/Henllyee/archive/2010/01/24/1655206.html
浙公网安备 33010602011771号