2013-03-26 3 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> 

Для Assembly5 и Assembly6, я указал Appender NewForEveryRun. В дополнение к этому, я сохранил root, так что остальные сборки регистрируются в соответствии с конфигурацией, указанной в приложении RollingLogFileAppender. Я думаю, корневой элемент регистрирует все сборки по умолчанию, даже если я упоминаю разные регистраторы для других сборок. Есть ли способ заблокировать ведение журнала Assembly5 и Assembly6 от root?

ответ

3

Получил это! Регистраторы должны выглядеть следующим образом:

<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

Причина, по которой это произошло, заключается в том, что по умолчанию ['Аддитивность'] (http://logging.apache.org/log4net/release/sdk/log4net.Repository.Hierarchy.Logger.Additive. html) установлено значение true. Это означает, что регистраторы наследуют приложения от своих родителей. В этом случае «Assembly5» и «Assembly6» наследовали «RollingLogFileAppender» из корневого регистратора. –