你可以从 这里了解和下载最新的log4net使用文档,demo和源码。 http://logging.apache.org/log4net/
log4net的配置文件,我喜欢把它放在一个独立的文件中。
<?xml version="1.0" encoding="utf-8" ?>
<log4net debug="true">
<appender name="RollingLogRootFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logs\log.txt" />
<appendToFile value="true" />
<maxSizeRollBackups value="100" />
<maximumFileSize value="1MB" />
<rollingStyle value= "Date " />
<datePattern value= "yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logs\tasklog.txt" />
<appendToFile value="true" />
<maxSizeRollBackups value="100" />
<maximumFileSize value="1MB" />
<rollingStyle value= "Date " />
<datePattern value= "yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date, %-5level %logger - %message %properties{extendProperty}%newline" />
</layout>
</appender>
<root>
<level value="Info" />
<appender-ref ref="RollingLogRootFileAppender" />
</root>
<logger name="SchedulerLibrary">
<level value="Info" />
<appender-ref ref="RollingLogFileAppender" />
</logger>
</log4net>
%properties{extendProperty}是根据业务系统需要被记录的扩展属性值,你可以在下面看到代码中怎么给这个属性设置值。
<logger name="SchedulerLibrary">会从<root>中继承,指定的name标明了这个logger只记录SchedulerLibrary命名空间的log,这样做的目的是我们可以把这个命名空间中的log放在一个单独的文件中,可以有独立的日志文件格式。
appender是指定日志文件的类型为文本文件,你也可以设置为在控制台显示或数据库中,上面的文本文件按日期生成,一天一个文件,并说明的文件的位置。
log4net的代码引用
首先在系统启动时加载配置文件,如果是web程序,可以在global.ascx文件中指定.
FileInfo file = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "Log4Net.config");
log4net.Config.XmlConfigurator.ConfigureAndWatch(file);
需要写日志的类中获得一个ilog对象
private static log4net.ILog logger = log4net.LogManager.GetLogger(typeof(MyService));
写日志
logger.Info("service started ok");
或
logger.Error("service started fail", ex);
如果存在需要记录扩展属性的话,一般我会用一个包装类来在程序中当作日志的新写入接口
public static class LogWrapper
{
public static void LoggerInfo(ILog log, string message,string extendProperty)
{
Level logLevel = Level.Info;
WriteLog(logLevel, log, message, extendProperty,null);
}
public static void LoggerError(ILog log, string message, string extendProperty,Exception ex)
{
Level logLevel = Level.Error;
WriteLog(logLevel, log, message, extendProperty,ex);
}
public static void LoggerDebug(ILog log, string message, string extendProperty)
{
Level logLevel = Level.Debug;
WriteLog(logLevel, log, message, extendProperty,null);
}
private static void WriteLog(Level logLevel, ILog log, string message, string extendProperty,Exception ex)
{
LoggingEvent loggingEvent = new LoggingEvent(
typeof(LogWrapper),
log.Logger.Repository,
log.Logger.Name,
logLevel,
message,
ex);
loggingEvent.Properties["extendProperty"] = extendProperty;
log.Logger.Log(loggingEvent);
}
}
粗体行就是增加的扩展属性,并设置值。
关于log4net的更多的使用说明,请到这里http://logging.apache.org/log4net/去看
上面的只是代码片段,你可以从这里下载到完整的示例。http://www.cnblogs.com/Files/shore/ShoreDemo.zip
这个示例是一个演示调度框架Quartz的使用的demo,这是一个windows service程序,我们给这个程序加上了日志记录,其实Quartz也包含有日志的输入如果我们在配置文件中启用日志记录,但出于演示目的我们采用log4net。关于Quartz的介绍,我将在下一篇blog中进行介绍。
