log4net的应用

log4net是最优秀的开源日志框架log4j的dotnet版。
你可以从 这里了解和下载最新的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中进行介绍。

 

1083984.html?type=1

shore 2008-02-27 17:39 发表评论

转载于:https://www.cnblogs.com/hotsoho.net/archive/2008/02/27/1206555.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值