简单明了:分6步来使用log4net组件
否则会包未能加载程序集的错误。一般我们用FRAMEWORK4.0,而非4.0profile。
不论哪种项目都可以加config文件,配置文件分4块。
4.1在configuration节点内,2种方式
1 <configSections> 2 <section name="log4net" type="System.Configuration.IgnoreSectionHandler"> 3 </section> 4 <!--<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net">第二种方式-->配置文件第一步
4.2在configuration节点定义log4net,log4net节点内定义appender,每个appender,日志对应一种输出方式。
输出到文本
输出到数据库
输出到控制台
当然还有其他输出位置,但是没有用到,先列出来。
1 具体说来有如下Appender: 2 AdoNetAppender:利用ADO.NET记录到数据库的日志。 3 AnsiColorTerminalAppender:在ANSI 窗口终端写下高亮度的日志事件。 4 AspNetTraceAppender:能用asp.net中Trace的方式查看记录的日志。 5 BufferingForwardingAppender:在输出到子Appenders之前先缓存日志事件。 6 ConsoleAppender:将日志输出到控制台。 7 EventLogAppender:将日志写到Windows Event Log. 8 FileAppender:将日志写到文件中。 9 LocalSyslogAppender:将日志写到local syslog service (仅用于UNIX环境下). 10 MemoryAppender:将日志存到内存缓冲区。 11 NetSendAppender:将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。 12 RemoteSyslogAppender:通过UDP网络协议将日志写到Remote syslog service。 13 RemotingAppender:通过.NET Remoting将日志写到远程接收端。 14 RollingFileAppender:将日志以回滚文件的形式写到文件中。 15 SmtpAppender:将日志写到邮件中。 16 TraceAppender:将日志写到.NET trace 系统。 17 UdpAppender:将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。日志输出方式
<!--定义输出到文件中--> <appender name="LogFileAppender" type="log4net.Appender.FileAppender"> <!--定义文件存放位置--> <file value="D:/log4netfile.txt"/> <appendToFile value="true"/> <rollingStyle value="Date"/> <datePattern value="yyyyMMdd-HH:mm:ss"/> <layout type="log4net.Layout.PatternLayout"> <!--每条日志末尾的文字说明--> <footer value="by 周公"/> <!--输出格式--> <!--样例:2008-03-26 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> <!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为C盘的log4net.mdb--> <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender"> <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C: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>输出方式appender,其他输出方式自己理解后,自己很容易就能查找
4.3在log4net节点定义root,在root节点下,每appender对应一个appender-ref,想同时多种方式记录日志,就写多个appender-ref,当然还要 对应appender
1 <root> 2 <!--文件形式记录日志--> 3 <appender-ref ref="LogFileAppender"/> 4 <!--控制台控制显示日志--> 5 <appender-ref ref="ConsoleAppender"/> 6 <!--Windows事件日志--> 7 <appender-ref ref="EventLogAppender"/> 8 <!-- 如果不启用相应的日志记录,可以通过这种方式注释掉 9 <appender-ref ref="AdoNetAppender_Access" /> 10 --> 11 </root>log4net节点下root节点下appender-ref
4.4 在log4net节点外,</configuration>节点内定义startup节点。
1 <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>startup
举2种:控制台和web。控制台需要加标签,WEB在global文件中app_start内加。都表示一开始运行程序就开始运行log4net记录
5.1控制台监视,在主函数命名空间前面加标签。2种标签
1 [assembly: log4net.Config.XmlConfigurator(ConfigFileExtension = "config", Watch = true)] 2 //[assembly: log4net.Config.XmlConfigurator(Watch = true)] 与上面一样控制台的2种标签
5.2 WEB
1 void Application_Start(object sender, EventArgs e) 2 { 3 // 在应用程序启动时运行的代码 4 log4net.Config.XmlConfigurator.Configure(); 5 }global
通过反射,获取Ilog实例,点出其方法,debug info error warn fatal,一般只用一个方法就可以了,用哪个方法,日志会对应配置文件中的appender的layout节点中的%level现实对应的信息等级。
个人认为:哪里出的异常非常严重就用fatal 觉得是错误用error 一般我们用info就行。
ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);//通过反射方式 ILog log = log4net.LogManager.GetLogger(typeof(当前类名));//通过反射方式log实例
记录:
1 log.Error("error", new Exception("错误")); 2 //记录严重错误 3 log.Fatal("fatal", new Exception("致命错误")); 4 //记录一般信息 5 log.Info("info", new Exception("信息")); 6 //记录调试信息 7 log.Debug("debug", new Exception("调试信息")); 8 //记录警告 9 log.Warn("warn", new Exception("警告"));5个等级
一般在WEB中,我们为了方便使用,监视开始后,不用在每个类(页面)中获取Ilog对象,在写记录。
我们一般写个Log4netHelper类,做好这两个功能(1获取实例,静态封装等级方法),在页面直接调用封装好的静态方法。
1 public class LogHelper 2 { 3 private LogHelper() { } 4 5 public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo"); //此处没有获取type of 当前类 public static void WriteLog(string info) 6 { 7 loginfo.Info(info); 8 } 9 }Log4netHelper
1 public class Log4netHelper 2 { 3 public static void WriteLog(Type type, string ex) 4 { 5 log4net.ILog log = log4net.LogManager.GetLogger(type); 6 log.info(ex); 7 } 8 }Log4netHelper
常用写入文本中的2种方式。appender中的节点配置。
1,按日期生成文本
1 <param name="File" value="Logs//LogInfo//" /> 2 <param name="AppendToFile" value="true" /> 3 <!--param name="MaxFileSize" value="50MB" /--> 4 <param name="MaxSizeRollBackups" value="100" /> 5 <param name="StaticLogFileName" value="false" /> 6 <param name="DatePattern" value="yyyyMMdd" /> 7 <param name="RollingStyle" value="Date" /> 8 <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />日期生成文本 appender参数
工作项目的截图
2,按文本大小,个数生成
<file value=""/> <appenderToFile value="true"/> <maxSizeRollBackups value="10"> 最多生成10个文件 <maximumFileSize value="1024KB"/> 每个文件最大1M <rollingStyle value="Size"/> 按文件大小 <staticLogFileName value="true"/> 文件名不变按文件大小生成个数
当第一个file.txt够1M时,会自动生成file1.txt,将file.txt文件内容剪切到file1.txt中,这样file.txt文件空了,会继续记录。够1M时,会自动生成file2.txt,剪切到file2.txt中,还是在file.txt中记录。
1 关于使用log4net中可能会使用到的一些参数 2 %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息 3 %n(new line):换行 4 %d(datetime):输出当前语句运行的时刻 5 %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数 6 %t(thread id):当前语句所在的线程ID 7 %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等 8 %c(class):当前日志对象的名称,例如: 9 %f(file):输出语句所在的文件名。 10 %l(line):输出语句所在的行号。 11 %数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。 12 下面以一个实际的例子来说明问题,比如在配置中有“%date [%thread] (%file:%line) %-5level %logger [%property{NDC}] - %message%newline”,那么实际的日志中会是如下格式: 13 “记录时间:2010-11-17 16:16:36,561 线程ID:[9] 日志级别:文件:所在行ERROR 出错类:Log4NetDemo.Program property:[(null)] - 错误描述:error 14 System.Exception: 在这里发生了一个异常,Error Number:2036084948”appender中的layout参数意义
http://logging.apache.org/log4net/release/manual/configuration.html log4net官网
http://www.cnblogs.com/dragon/archive/2005/03/24/124254.html周金桥
http://zhoufoxcn.blog.51cto.com/792419/429988/ 周金桥
http://www.cnblogs.com/wangsaiming/archive/2013/01/11/2856253.html 柄棋先生