Log4Net使用指南
2011-09-02 11:30
447 查看
主要参考:
/article/4776146.html
/article/5603544.html
Level有以下几种取值
表1 Logger的日志级别
在config文件中添加以下的语句
log4net.Layout.PatternLayout中的转换模式(ConversionPattern)
%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
代码为:
则输出为下面的形式:
Exam.Log - Hello
%L:输出语句所在的行号
%F:输出语句所在的文件名
%-数字:表示该项的最小长度,如果不够,则用空格填充
例如,转换模式为%r [%t]%-5p %c - %m%n 的 PatternLayout 将生成类似于以下内容的输出:
176 [main] INFO org.foo.Bar - Located nearest gas station.
在项目的AssemblyInfo.cs文件里添加以下的语句
或
或
用如果需要日志文件名不固定,可用程序声明 log 或用以下方法, 或 用 RollingLogFileAppender
在程序中配置log4net
除了前面讲的用一个配置文件来配置log4net以外,还可以在程序中用代码来配置log4net框架。如下面的例子:
如 用此方法声明文件名,则需去除配置文件中文件名的声明,否则会产生两个文件.
动态修改log4net组件的日志文件名
http://www.cnblogs.com/haptear/archive/2006/11/29/431351.html
ok,让我们测试一下
下面是以日期为文件名:
http://hi.baidu.com/xtuwangzhi/blog/item/35cac05568e68453d00906f9.html
下面是RollingFileAppender类中的部分Public Instance Properties(公共属性)的说明,没有全部测试,难免谬误,如果你知道,请不要吝啬告写。
CountDirection : 定义当前文件是最小编号的文件还是最大编号的文件。默认为-1,总是以更小的编号。
datePattern : DateFormatter日期格式,string类型。
Encoding : 就是文件的编码,默认为Default,就是程序本身的编码了。
FilterHead : 分割符头部。
ImmediateFlush : 表示是否立即输出到文件,布尔型的。
LockingModel : 文件锁类型,RollingFileAppender本身不是线程安全的,如果在程序中没有进行线程安全的限制,可以在这里进行配置,确保写入时的安全。有两中类型:FileAppender.ExclusiveLock 和 FileAppender.MinimalLock
Name : 设置本Appander的名称。
SecurityContext : 比较少应用,对日志进行加密只类的,使用SecurityContextProvider转换。(对日志的保密要求比较高的时候应该可以应用上吧,Log4考虑的还挺周全)
Threshold : 设置内容级别的,比如:DEBUG,INFO等等。
按大小自动切割多个文件的方法:
/article/4776146.html
/article/5603544.html
Level有以下几种取值
级别 | 允许的方法 | Boolean属性 | 优先级别 |
OFF | Highest | ||
FATAL | void Fatal(...); | bool IsFatalEnabled; | |
RROR | void Error(...); | bool IsErrorEnabled; | |
WARN | void Warn(...); | bool IsWarnEnabled; | |
INFO | void Info(...); | bool IsInfoEnabled; | |
DEBUG | void Debug(...); | bool IsDebugEnabled; | |
ALL | Lowest |
在config文件中添加以下的语句
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net-net-1.0" /> </configSections> <log4net> <root> <level value="WARN" /> <appender-ref ref="LogFileAppender" /> <appender-ref ref="ConsoleAppender" /> </root> <logger name="testApp.Logging"> <level value="DEBUG"/> </logger> <appender name="LogFileAppender" type="log4net.Appender.FileAppender" > <param name="File" value="log-file.txt" /> <param name="AppendToFile" value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="[Header]\r\n"/> <param name="Footer" value="[Footer]\r\n"/> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="DEBUG" /> <param name="LevelMax" value="WARN" /> </filter> </appender> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" > <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /> </layout> </appender> </log4net> </configuration>
log4net.Layout.PatternLayout中的转换模式(ConversionPattern)
%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
代码为:
ILog log=LogManager.GetLogger(“Exam.Log”); log.Debug(“Hello”);
则输出为下面的形式:
Exam.Log - Hello
%L:输出语句所在的行号
%F:输出语句所在的文件名
%-数字:表示该项的最小长度,如果不够,则用空格填充
例如,转换模式为%r [%t]%-5p %c - %m%n 的 PatternLayout 将生成类似于以下内容的输出:
176 [main] INFO org.foo.Bar - Located nearest gas station.
在项目的AssemblyInfo.cs文件里添加以下的语句
[assembly:log4net.Config.DOMConfigurator(ConfigFile="filename", ConfigFileExtension="ext",Watch=true/false)]
或
[assembly: log4net.Config.DOMConfigurator()]
或
[assembly: log4net.Config.XmlConfigurator()]
用如果需要日志文件名不固定,可用程序声明 log 或用以下方法, 或 用 RollingLogFileAppender
在程序中配置log4net
除了前面讲的用一个配置文件来配置log4net以外,还可以在程序中用代码来配置log4net框架。如下面的例子:
如 用此方法声明文件名,则需去除配置文件中文件名的声明,否则会产生两个文件.
// 和PatternLayout一起使用FileAppender log4net.Config.BasicConfigurator.Configure( new log4net.Appender.FileAppender( new log4net.Layout.PatternLayout("%d [%t]%-5p %c [%x] - %m%n"),"testfile.log")); // using a FileAppender with an XMLLayout log4net.Config.BasicConfigurator.Configure( new log4net.Appender.FileAppender( new log4net.Layout.XMLLayout(),"testfile.xml")); // using a ConsoleAppender with a PatternLayout log4net.Config.BasicConfigurator.Configure( new log4net.Appender.ConsoleAppender( new log4net.Layout.PatternLayout("%d [%t] %-5p %c - %m%n"))); // using a ConsoleAppender with a SimpleLayout log4net.Config.BasicConfigurator.Configure( new log4net.Appender.ConsoleAppender(new log4net.Layout.SimpleLayout()));
动态修改log4net组件的日志文件名
http://www.cnblogs.com/haptear/archive/2006/11/29/431351.html
private void ChangeLog4netLogFileName(log4net.ILog iLog,string fileName) { log4net.Core.LogImpl logImpl= iLog as log4net.Core.LogImpl; if(logImpl!=null) { log4net.Appender.AppenderCollection ac=((log4net.Repository.Hierarchy.Logger)logImpl.Logger).Appenders; for(int i=0;i<ac.Count;i++) { //这里我只对RollingFileAppender类型做修改 log4net.Appender.RollingFileAppender rfa = ac[i] as log4net.Appender.RollingFileAppender; if(rfa!=null) { rfa.File = fileName; if(!System.IO.File.Exists(fileName)) { System.IO.File.Create(fileName); } //更新Writer属性 rfa.Writer=new System.IO.StreamWriter(rfa.File,rfa.AppendToFile,rfa.Encoding); } } } }
ok,让我们测试一下
private void TestChangeLog4netLogFileName() { string fileName = @"c:\chang.log"; log4net.ILog iLog = log4net.LogManager.GetLogger("AppLogger"); ChangeLog4netLogFileName(iLog, fileName); iLog.Info("Test:info"); }
下面是以日期为文件名:
http://hi.baidu.com/xtuwangzhi/blog/item/35cac05568e68453d00906f9.html
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net-net-1.0" /> </configSections> <log4net> <root> <level value="Debug" /> <appender-ref ref="RollingLogFileAppender" /> </root> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <!--日志文件名开头--> <param name="File" value="c:\\" /> <!--是否追加到文件--> <param name="AppendToFile" value="true" /> <param name="MaxSizeRollBackups" value="10" /> <param name="StaticLogFileName" value="false" /> <!--日志文件格式--> <param name="DatePattern" value="yyyyMMdd'.log'" /> <!--按照文件的大小进行变换日志文件--> <!--<param name="RollingStyle" value="Size" />--> <!--我这里按照日期--> <param name="RollingStyle" value="Date" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n%n" /> </layout> </appender> </log4net> </configuration>
下面是RollingFileAppender类中的部分Public Instance Properties(公共属性)的说明,没有全部测试,难免谬误,如果你知道,请不要吝啬告写。
CountDirection : 定义当前文件是最小编号的文件还是最大编号的文件。默认为-1,总是以更小的编号。
datePattern : DateFormatter日期格式,string类型。
Encoding : 就是文件的编码,默认为Default,就是程序本身的编码了。
FilterHead : 分割符头部。
ImmediateFlush : 表示是否立即输出到文件,布尔型的。
LockingModel : 文件锁类型,RollingFileAppender本身不是线程安全的,如果在程序中没有进行线程安全的限制,可以在这里进行配置,确保写入时的安全。有两中类型:FileAppender.ExclusiveLock 和 FileAppender.MinimalLock
Name : 设置本Appander的名称。
SecurityContext : 比较少应用,对日志进行加密只类的,使用SecurityContextProvider转换。(对日志的保密要求比较高的时候应该可以应用上吧,Log4考虑的还挺周全)
Threshold : 设置内容级别的,比如:DEBUG,INFO等等。
按大小自动切割多个文件的方法:
<?xml version="1.0" encoding="utf-8"?> <log4net> <!--OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL--> <!--Set root logger level to ERROR and its appenders--> <root> <levelvalue="ALL"/> <appender-refref="SysAppender"/> </root> <!-- Print only messages of level DEBUG or above in the packages--> <loggername="WebLogger"> <levelvalue="DEBUG"/> </logger> <appendername="SysAppender" type="log4net.Appender.RollingFileAppender"> <paramname="File" value="App_Data\Logs.txt"/> <paramname="AppendToFile" value="true"/> <paramname="MaxSizeRollBackups" value="12"/><!-- 切割最多文件数--> <paramname="MaximumFileSize" value="500KB"/><!-- 每个文件的大小--> <paramname="RollingStyle" value="Size"/> <paramname="StaticLogFileName" value="true"/> <layouttype="log4net.Layout.PatternLayout"> <paramname="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/> </layout> </appender> </log4net>