log4net配置经验教训

第一点:权限问题,一定要给要写入日志文件的目录宽松的权限。
本人就是因为权限问题浪费了很多时间。(因为iis user 的权限是相对低的,log4net又需要创建文件,所以权限一定要给足,后面可以用应用程序池配置)

本人想用单独配置文件,所以基本步骤如下:
1:下载net4log,
具体地址就不贴了,给一个官网的配置说明页:

http://logging.apache.org/log4net/release/manual/configuration.html

2:使用对应版本的dll,

       一定要使用对应版本的,我就因为使用的版本不对应,浪费了时间
       2.0就是选2.0,4.0就选4.0

3:在项目中引入dll

4:使用单独的配置文件,这样做的好处–修改log4net的配置不会影响到整个应用重启。我的路径是:
Configure目录下,log4netConfig.xml文件
Configure\log4netConfig.xml
具体内容:自己可看相应的说明


<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  configSections>
  
  <log4net>
    
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" />
      layout>
    appender>
    
    <appender name="errorAppender" type="log4net.Appender.RollingFileAppender">
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="ERROR" />
      filter>
      <filter type="log4net.Filter.DenyAllFilter" />
      <File value="Logs\\err.log" />
      <PreserveLogFileNameExtension value="true" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      layout>
    appender>
    <appender name="infoAppender" type="log4net.Appender.RollingFileAppender">
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="INFO" />
      filter>
      <filter type="log4net.Filter.DenyAllFilter" />
      <File value="Logs\\info.log" />
      <PreserveLogFileNameExtension value="true" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      layout>
    appender>
    <appender name="debugAppender" type="log4net.Appender.RollingFileAppender">
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="DEBUG" />
      filter>
      <filter type="log4net.Filter.DenyAllFilter" />
      <File value="Logs\debug.log" />
      <PreserveLogFileNameExtension value="true" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      layout>
    appender>
    <appender name="perfAppender" type="log4net.Appender.RollingFileAppender">
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="INFO" />
      filter>
      <filter type="log4net.Filter.DenyAllFilter" />
      <File value="Logs\perf.log" />
      <PreserveLogFileNameExtension value="true" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %logger - %message%newline" />
      layout>
    appender>

     <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Logs\Log_" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd'.txt'" />
      <staticLogFileName value="false" />
      <layout type="log4net.Layout.PatternLayout">
        <header value="------------------------------------------------------------  
" />
        <ConversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
      layout>
    appender>

    
    <root>
      <level value="ALL" />
      <appender-ref ref="errorAppender" />
      <appender-ref ref="infoAppender" />
      <appender-ref ref="debugAppender" />
    root>
    
    <logger name="Performance" additivity="false">
      <level value="ALL" />
      <appender-ref ref="perfAppender" />
    logger>


  log4net>

configuration>

5:修改AssemblyInfo.cs
用于log4net能够读取配置文件。指定配置文件的路径

 //定义log4net配置文件路径
//[assembly: log4net.Config.DOMConfigurator(ConfigFile = @"Configure\log4netConfig.xml", Watch = true)]
//也可用上面的语句,上面的是老的方式
[assembly: log4net.Config.XmlConfiguratorAttribute(ConfigFile = @"Configure\log4netConfig.xml", Watch = true)]

6:新建存放配置文件的目录,**

并授权可写很重要

**

7:在代码中使用:
首先要定义在类体内:

//DataHandler 是类名,用于反射,多查查就知道了,用的时候替换掉;logger也是可以更改的,后面用的时候记住就好。
 private static readonly ILog logger = LogManager.GetLogger(typeof(DataHandler));
//在想要用的位置就可以使用了。具体的后面的是和配置文件对应的,如括号内的是要输出的字符串。其中的Debug是日志级别,以标明该日志记录是什么级别的日志,再在配置文件中appender内配置相应的级别就可以将内容写入到相应的文件中。
 logger.Debug("Debug test");

结束,看对应目录下是否有文件。

log4net的架构分为四个要素:logger;appender;layout;filter。
logger是负责日志的记录者
appender提供记录的介质
layout负责把记入的内容格式化
filter负责把内容进行筛选
可以说,整个过程就是一个日志流水线,每个成员负责其中的一个环节
logger发出记录信息,appender接到信息,根据内部的layout配置对记录信息格式化,根据filter决定此信息是否被过滤掉,最后,将其序列化
log4net具体思路:通过配置文件实例化对象Logger(产生)->appender(接收)->过滤日志(filter)->layout序列化输出 appender的记录介质

你可能感兴趣的:(开发)