Log4Net使用指南

来源:互联网 发布:网络安全法是为了维护 编辑:程序博客网 时间:2024/05/21 15:45
 

主要参考:

http://www.cnblogs.com/dragon/archive/2005/03/24/124254.html

http://www.cnblogs.com/neekerss/archive/2011/01/04/1925171.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

1  Logger的日志级别

在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): 日志的当前优先级别,即DEBUGINFOWARN…

%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 XMLLayoutlog4net.Config.BasicConfigurator.Configure(   new log4net.Appender.FileAppender(     new log4net.Layout.XMLLayout(),"testfile.xml")); // using a ConsoleAppender with a PatternLayoutlog4net.Config.BasicConfigurator.Configure(   new log4net.Appender.ConsoleAppender(    new log4net.Layout.PatternLayout("%d       [%t] %-5p %c - %m%n"))); // using a ConsoleAppender with a SimpleLayoutlog4net.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>


原创粉丝点击