2013-03-26 54 views
2

单独记录器我有我的应用程序,它具有以下方式多组件写入两个日志文件组件:座记录对于具有log4net的

Assembly1 log -> MainLog.log 
Assembly2 log -> MainLog.log 
Assembly3 log -> MainLog.log 
Assembly4 log -> MainLog.log 
Assembly5 log -> SubLog.log 
Assembly6 log -> SubLog.log 

日志文件被正确地写入,但这里的问题是,SubLog条目也被写入MainLog文件中。我不希望发生这种日志记录重复。这是我的log4net配置。

<log4net> 
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="Logs//MainLog.txt" /> 
     <appendToFile value="true" /> 
     <maxSizeRollBackups value="10" /> 
     <maximumFileSize value="100KB" /> 
     <rollingStyle value="Size" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%M %date [%thread] %-5level %logger [%ndc] - %message  %C, %F, %l, %L %M %newline" /> 
     </layout> 
    </appender> 
    <appender name="NewForEveryRun" type="log4net.Appender.FileAppender"> 
     <file type="log4net.Util.PatternString" value="Logs//SubLog-%processid.txt"/> 
     <appendToFile value="true" /> 
     <maximumFileSize value="10MB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> 
     </layout> 
    </appender> 
    <logger name="Assembly5"> 
     <level value="DEBUG"/> 
     <appender-ref ref="NewForEveryRun"/> 
    </logger> 
    <logger name="Assembly6"> 
     <level value="DEBUG"/> 
     <appender-ref ref="NewForEveryRun"/> 
    </logger> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="RollingLogFileAppender" /> 
    </root> 

Assembly5Assembly6,我指定了附加器NewForEveryRun。除此之外,我保留了root,以便其余的程序集根据RollingLogFileAppender appender中指定的配置进行记录。我猜,根元素默认记录所有程序集,即使我提到其他程序集的不同记录器。有没有办法阻止从根目录登录Assembly5Assembly6

回答

3

Got it!记录器应该如下所示:

<logger name="Assembly5" additivity="false"> 
    <level value="DEBUG"/> 
    <appender-ref ref="NewForEveryRun"/> 
</logger> 
<logger name="Assembly6" additivity="false"> 
    <level value="DEBUG"/> 
    <appender-ref ref="NewForEveryRun"/> 
</logger> 

additivity设置为假是解决方案。没有更多的重复日志:)

+0

这种情况发生的原因是因为默认['Additivity'](http://logging.apache.org/log4net/release/sdk/log4net.Repository.Hierarchy.Logger.Additivity。 html)设置为true。这意味着伐木工从父母那里继承了追随者。在这种情况下,'Assembly5'和'Assembly6'继承了根记录器中的'RollingLogFileAppender'。 – 2013-03-27 14:36:55