一直想找一个好用的日子类,今天偶然的机会看到了log4net这个类库,过来学习一下。html
log4net是.NET框架下的一个日子类库,官网是http://logging.apache.org/log4net/,打开就一股浓浓的Apache 风格扑鼻而来。web
http://apache.fayea.com//logging/log4net/binaries/log4net-1.2.15-bin-newkey.zip数据库
├─bin
│ ├─cli
│ │ └─1.0
│ ├─mono
│ │ ├─1.0
│ │ ├─2.0
│ │ ├─3.5
│ │ └─4.0
│ ├─net
│ │ ├─1.0
│ │ ├─1.1
│ │ ├─2.0
│ │ ├─3.5
│ │ ├─4.0
│ │ └─4.5
│ └─net-cp
│ ├─3.5
│ └─4.0
└─docapache
若是是win下的通常使用net文件夹,找到对应的.net版本引用dll便可。缓存
配置网络
按照官方文档的说明配置能够经过代码和配置文件两种。并发
经过配置文件配置通常是使用系统的配置文件,好比WinForm的app.config,Web的web.config,也能够自定义xml文件,可是要经过log4net.Config.XmlConfigurator.Configure(…)手动初始化。app
一个简单的配置文件模板以下:框架
<?xml version="1.0" encoding="utf-8"?> <configuration> <configsections><section name="log4net" type="System.Configuration.IgnoreSectionHandler"> <log4net> <appender name="X" type="log4net.Appender.X"> <layout type="log4net.Layout.PatternLayout"> <conversionpattern value="XX"> </conversionpattern></layout> </appender> <root> <level value="XXX"> <appender-ref ref="X"> </appender-ref></level></root> </log4net></section></configsections></configuration>
%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
%n(new line):换行
%d(datetime):输出当前语句运行的时刻
%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
%t(thread id):当前语句所在的线程ID
%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
%c(class):当前日志对象的名称,例如:
%f(file):输出语句所在的文件名。
%l(line):输出语句所在的行号。
%数字:表示该项的最小长度,若是不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,若是实际长度不够5个字符则以空格填充。函数
(若是是WinForm,这个库是不能本身创建控制台窗体的,能够经过WinAPI的 [DllImport(“kernel32.dll”)]public static extern Boolean AllocConsole(); 先自行建立控制台)
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionpattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"> </conversionpattern></layout> </appender>
<appender name="ManagedColoredConsoleAppender" type="log4net.Appender.ManagedColoredConsoleAppender"> <mapping> <level value="ERROR"> <forecolor value="White"> <backcolor value="Red"> </backcolor></forecolor></level></mapping> <layout type="log4net.Layout.PatternLayout"> <conversionpattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"> </conversionpattern></layout> </appender>
<appender name="FileAppender" type="log4net.Appender.FileAppender"> <file value="log-file.txt"> <appendtofile value="true"> <layout type="log4net.Layout.PatternLayout"> <conversionpattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"> </conversionpattern></layout> </appendtofile></file></appender>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="log\\"> <appendtofile value="true"> <datepattern value="yyyy\\MM\\dd'.txt'"> <staticlogfilename value="false"> <layout type="log4net.Layout.PatternLayout"> <conversionpattern value="记录时间:%date %n线程ID:[%thread] %n日志级别: %-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message %n"> </conversionpattern></layout> </staticlogfilename></datepattern></appendtofile></file></appender>
<appender name="ForwardingAppender" type="log4net.Appender. ForwardingAppender"> <threshold value="WARN"> <appender-ref ref="RollingFileAppender"> </appender-ref></threshold> </appender>
<appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender"> <buffersize value="100"> <appender-ref ref="RollingFileAppender"> </appender-ref></buffersize> </appender>
经过代码动态配置主要经过这个函数:
log4net.Config.BasicConfigurator.Configure()
他有5个重载:
public static ICollection Configure(); public static ICollection Configure(IAppender appender); public static ICollection Configure(params IAppender[] appenders); public static ICollection Configure(ILoggerRepository repository); public static ICollection Configure(ILoggerRepository repository, IAppender appender); public static ICollection Configure(ILoggerRepository repository, params IAppender[] appenders);
appender参数应该和签名XML配置差很少。
调用很简单啦。如今类里面见一个对象:
private static readonly ILog log = LogManager.GetLogger(typeof(JSShareObj));
其中public static ILog GetLogger(Type type)中的参数type会显示在前面模板中的%logger中。
而后就能够调用log的各类方法了:
Log.Debug,Log.Error,Log.Fatal,Log.Info,Log.Warn