来源:https://www.cnblogs.com/zhuhc/p/3447018.html
我们可根据不同情况,输出不同级别的日志。
将下载的对应版本的log4net.dll文件引入到工程中,然后再工程的AssemblyInfo.cs文件中添加
1 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]
上面的是单独文件的配置,如果我们将log4net的配置放入到app.config或者是web.config,则在AssemblyInfo.cs文件中添加配置时,不需要设置ConfigFile = "log4net.config", 如下:
1 [assembly: log4net.Config.XmlConfigurator()]
这个为log4net的初始化设置,当然我们也可以在代码中进行初始化,但是我比较喜欢在AssemblyInfo.cs文件中进行初始化。
如下面的代码,与上面的效果是一样的:
1 log4net.Config.XmlConfigurator.Configure(new FileInfo("log4net.Config"));
配置文件log4net.config:
A.XML
1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 <log4net> 4 <logger name="loginfo"> 5 <level value="INFO" /> 6 <appender-ref ref="LogCommon" /> 7 </logger> 8 <appender name="LogCommon" type="log4net.Appender.RollingFileAppender"> 9 <param name="File" value="logs\"/> 10 <param name="AppendToFile" value="true"/> 11 <param name="maxSizeRollBackups" value="10"/> 12 <param name="maximumFileSize" value="1MB"/> 13 <param name="staticLogFileName" value="false"/> 14 <param name="DatePattern" value="yyyy-MM/yyyy-MM-dd".log"" /> 15 <param name="RollingStyle" value="Composite" /> 16 <layout type="log4net.Layout.XmlLayout"> 17 <param name="Header" value="<?xml version="1.0" ?><logs>" /> 18 <param name="Footer" value="</logs>" /> 19 </layout> 20 <filter type="log4net.Filter.LevelRangeFilter"> 21 <param name="LevelMin" value="INFO" /> 22 <param name="LevelMax" value="RROR" /> 23 </filter> 24 </appender> 25 </log4net> 26 </configuration>
以上是将日志存储到xml中的配置文件,根据官网的提示,添加了Header和Footer。因为默认的为xmlNode,当使用XMLDocument访问的时候,会提示不是有效的xml文件。
当然如果这种生成xml的方式还是不能满足工作需要的话,可以访问http://blogs.lessthandot.com/index.php/DesktopDev/MSTech/making-an-xmllayout-for-log4net
有大能自定义了XMLLayout,但是代码是VB的,可参照或者扩展。
参数说明:
type="log4net.Appender.RollingFileAppender",log4net提供了各种可实现不同功能的Appender,具体可参考官方提供的帮助文档http://logging.apache.org/log4net/release/sdk/log4net.Appender.html,或者:@Anders Cui 翻译的 log4net的各种Appender配置示例
或者原文:http://logging.apache.org/log4net/release/config-examples.html
B.文本
如果想输出到文本,则将配置文件中的Layout的Type属性修改成:log4net.Layout.PatternLayout
1 <layout type="log4net.Layout.PatternLayout"> 2 <param name="Header" value="[Header]\r\n"/> 3 <param name="Footer" value="[Footer]\r\n"/> 4 <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /> 5 </layout>
参数说明
Layout用法可参考:http://www.cnblogs.com/manhoo/archive/2009/06/25/1511066.html
%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
%n(new line):换行
%d(datetime):输出当前语句运行的时刻
%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
%t(thread id):当前语句所在的线程ID
%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
%c(class):当前日志对象的名称,例如:
模式字符串为:%-10c -%m%n
%L:输出语句所在的行号
%F:输出语句所在的文件名
%-数字:表示该项的最小长度,如果不够,则用空格填充
C.数据库(SQLServer 2008)
1 <?xml version="1.0"?> 2 <configuration> 3 <log4net> 4 <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender"> 5 <bufferSize value="1" /> 6 <useTransactions value="false" /> 7 <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 8 <connectionString value="Data Source=192.168.1.99\SQLSERVER;Initial Catalog=RailWeightDB;User ID=sa; PWD=*******;" /> 9 <commandText value="INSERT INTO [RailWeightDB].[dbo].[SysLog]([ThreadName],[LevelName],[Message],[Exception],[CreateTime],[CreaterID]) VALUES (@thread,@level,@message,@exception,@time,@user)" /> 10 <parameter> 11 <parameterName value="@thread" /> 12 <dbType value="String" /> 13 <size value="100" /> 14 <layout type="log4net.Layout.PatternLayout"> 15 <conversionPattern value="%t" /> 16 </layout> 17 </parameter> 18 <parameter> 19 <parameterName value="@level" /> 20 <dbType value="String" /> 21 <size value="50" /> 22 <layout type="log4net.Layout.PatternLayout"> 23 <conversionPattern value="%p" /> 24 </layout> 25 </parameter> 26 <parameter> 27 <parameterName value="@message" /> 28 <dbType value="String" /> 29 <size value="5000" /> 30 <layout type="log4net.Layout.PatternLayout"> 31 <conversionPattern value="%m" /> 32 </layout> 33 </parameter> 34 <parameter> 35 <parameterName value="@exception" /> 36 <dbType value="String" /> 37 <size value="5000" /> 38 <layout type="log4net.Layout.ExceptionLayout" /> 39 </parameter> 40 <parameter> 41 <parameterName value="@time" /> 42 <dbType value="DateTime" /> 43 <layout type="log4net.Layout.RawTimeStampLayout" /> 44 </parameter> 45 <parameter> 46 <parameterName value="@user" /> 47 <dbType value="String" /> 48 <size value="50" /> 49 <layout type="log4net.Layout.PatternLayout"> 50 <conversionPattern value="%X{user}" /> 51 </layout> 52 </parameter> 53 </appender> 54 <!-- specify the level for some specific categories --> 55 <logger name="SysLog"> 56 <level value="DEBUG"/> 57 <appender-ref ref="ADONetAppender"/> 58 </logger> 59 </log4net> 60 </configuration>
在配置数据库过程中遇到过好多麻烦,当然,过程是痛苦的,结果是美好的。
参数说明
bufferSize:一般设置为1,如果设置为10,则,我们写10次log才会被写入一次,这种可能会造成延迟更新,也就是说我10:10操作的日志,到10:15,buffer满了,此时才会写入到数据库中,如果协同交互较多,并且需要频繁写日志,则可根据实际情况,将其设置为较大的值。
useTransactions :是否使用存储过程,bool类型。
connectionType:其中Version,我看到过2.0,也看到过1.3,好像官网的就是1.3,然后我查了这个,据非官方说明,这个是.netframework的版本。
%X{user}:%X代表的是MDC,如果不明白这个才是是怎么来的,可参考下面的注意事项以及Layout参数说明