您的位置:首页 > 其它

Log4Net使用指南

2011-09-02 11:30 447 查看
主要参考:

/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

表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): 日志的当前优先级别,即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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: