最近自己在做一个小东西,用log4net日志组件来记录日志,自己在前人的基础上加工总结,拿出来给大家分享一下,不足之处大拿们使劲拍砖,感激不尽!
第一步:配置config文件
为了方便管理,把log4net的配置文件从web.config中分离,新建一个名为log4net.config的文件,内容如下:
View Code
1 <?xml version="1.0" encoding="UTF-8"?> 2 <log4net debug="false"> 3 4 <!--按日期分割日志文件 一天一个--> 5 <appender name="LogFileAppenderByDate" type="log4net.Appender.RollingFileAppender" > 6 7 <!--是否续写--> 8 <param name="AppendToFile" value="true" /> 9 <!--最小锁定模型以允许多个进程可以写入同一个文件--> 10 <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" /> 11 <param name="StaticLogFileName" value="true" /> 12 <!--保存路径--> 13 <param name="File" value="F:\Log\\" /> 14 <param name="DatePattern" value="yyyy-MM-dd.LOG" /> 15 <param name="StaticLogFileName" value="false" /> 16 <param name="RollingStyle" value="Date" /> 17 <layout type="log4net.Layout.PatternLayout"> 18 <param name="ConversionPattern" value="时间:%d %n级别:%level %n类名:%c%n文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" /> 19 </layout> 20 </appender> 21 22 <!--按日志容量分割日志文件 10KB一个--> 23 <appender name="LogFileAppenderBySize" type="log4net.Appender.RollingFileAppender" > 24 25 <!--是否续写--> 26 <param name="AppendToFile" value="true" /> 27 <!--最小锁定模型以允许多个进程可以写入同一个文件--> 28 <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" /> 29 30 <param name="StaticLogFileName" value="true" /> 31 32 <!--按照文件的大小进行变换日志文件--> 33 <param name="RollingStyle" value="Size" /> 34 <param name="File" value="LogData\\log.txt" /> 35 <!--单个文件最大数量 好像只有在 按Size分割时有效--> 36 <param name="MaximumFileSize" value="10KB"/> 37 <!--保留的log文件数量 超过此数量后 自动删除之前的 好像只有在 按Size分割时有效--> 38 <param name="MaxSizeRollBackups" value="2" /> 39 40 <param name="StaticLogFileName" value="false" /> 41 <layout type="log4net.Layout.PatternLayout"> 42 <param name="ConversionPattern" value="发生时间:%d %n事件级别:%level %n相关类名:%c%n程序文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" /> 43 </layout> 44 </appender> 45 <!--记录日志到数据库--> 46 <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 47 <bufferSize value="100" /> 48 <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 49 <connectionString value="data source=GAS-HECHEN;initial catalog=dsc141051_db;integrated security=false;persist security info=True;User ID=sa;Password=000000" /> 50 <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" /> 51 <parameter> 52 <parameterName value="@log_date" /> 53 <dbType value="DateTime" /> 54 <layout type="log4net.Layout.RawTimeStampLayout" /> 55 </parameter> 56 <parameter> 57 <parameterName value="@thread" /> 58 <dbType value="String" /> 59 <size value="255" /> 60 <layout type="log4net.Layout.PatternLayout"> 61 <conversionPattern value="%thread" /> 62 </layout> 63 </parameter> 64 <parameter> 65 <parameterName value="@log_level" /> 66 <dbType value="String" /> 67 <size value="50" /> 68 <layout type="log4net.Layout.PatternLayout"> 69 <conversionPattern value="%level" /> 70 </layout> 71 </parameter> 72 <parameter> 73 <parameterName value="@logger" /> 74 <dbType value="String" /> 75 <size value="255" /> 76 <layout type="log4net.Layout.PatternLayout"> 77 <conversionPattern value="%logger" /> 78 </layout> 79 </parameter> 80 <parameter> 81 <parameterName value="@message" /> 82 <dbType value="String" /> 83 <size value="4000" /> 84 <layout type="log4net.Layout.PatternLayout"> 85 <conversionPattern value="%message" /> 86 </layout> 87 </parameter> 88 <parameter> 89 <parameterName value="@exception" /> 90 <dbType value="String" /> 91 <size value="2000" /> 92 <layout type="log4net.Layout.ExceptionLayout" /> 93 </parameter> 94 </appender> 95 <root> 96 <level value="INFO" /> 97 <!--启用按日期分割--> 98 <appender-ref ref="LogFileAppenderByDate" /> 99 <!--启用按容量分割--> 100 <!--<appender-ref ref="LogFileAppenderBySize" />--> 101 <!--启用保存到数据库--> 102 <!--<appender-ref ref="AdoNetAppender" />--> 103 </root> 104 </log4net>
内容主要配置日志的输出方式:1、按日期生成 2、按文件大小 生成 3、把日志保存到数据库文件。最后root节点是设置启动哪种方式来保存日志,以及设置日志的级别
第二步:把Log4Net.config文件添加到项目启动项
在website或winform 项目下的Global.asax.cs类的Application_Start()方法下添加加载日志配置文件代码
View Code
1 void Application_Start(object sender, EventArgs e) 2 { 3 // Code that runs on application startup 4 log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(Server.MapPath("/Log4Net.config"))); 5 }
第三步:在类库里添加日志帮助类LogHelper
添加辅助类的目的:1、方便各个类库及项目直接调用,不用每个项目里都添加log4net的引用
2、为了支持根据自己配置的日志输出格式和输出方式 输出日志(configPath 用来传入日志配置路径)
View Code
1 /// <summary> 2 /// 日志辅助类 3 /// </summary> 4 public class LogHelper 5 { 6 private static ILog log; 7 private static LogHelper logHelper = null; 8 /// <summary> 9 /// 初始化 10 /// </summary> 11 /// <returns></returns> 12 public static ILog GetInstance() 13 { 14 logHelper = new LogHelper(null); 15 16 return log; 17 } 18 /// <summary> 19 /// 初始化 20 /// </summary> 21 /// <param name="configPath"></param> 22 /// <returns></returns> 23 public static ILog GetInstance(string configPath) 24 { 25 logHelper = new LogHelper(configPath); 26 27 return log; 28 } 29 /// <summary> 30 /// 构造函数 31 /// </summary> 32 /// <param name="configPath"></param> 33 private LogHelper(string configPath) 34 { 35 if (!string.IsNullOrEmpty(configPath)) 36 { 37 log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 38 log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(configPath)); 39 } 40 else 41 { 42 log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 43 } 44 } 45 46 }
第四步:在项目里应用日志
View Code
ILog log = LogHelper.GetInstance(); log.Fatal("Fatal");
或者
ILog log = LogHelper.GetInstance(configPath); log.Fatal("diaoxw");