Я использую Log4Net в своем проекте и хотел бы настроить его так, чтобы сообщения отладки / информации передавались в файлы, специфичные для каждого класса, а все сообщения об ошибках - в центральный файл.
В моем приложенииУ меня есть несколько "рабочих".Я бы хотел, чтобы у каждого работника был свой собственный файл журнала для записи отладочных сообщений.Если я получаю сообщение отладки, которое не записано на конкретном работнике, я бы хотел, чтобы оно было записано в центральный файл отладки.Я также хотел бы иметь централизованное ведение журнала ошибок, где все ошибки от любого из работников записываются в один и тот же файл.
У меня возникают трудности с определением конфигурации XML для этого.Вот самое близкое, что я получил:
<log4net>
<appender name="DebugLog" type="log4net.Appender.RollingFileAppender">
<file value="logs\debug.log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="ddMMyyyy" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="FATAL" />
</filter>
</appender>
<appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
<file value="logs\error.log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="ddMMyyyy" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline%stacktrace{1}%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR" />
<levelMax value="FATAL" />
</filter>
</appender>
<appender name="Worker1" type="log4net.Appender.RollingFileAppender">
<file value="logs\Worker1.log" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<datePattern value="ddMMyyyy" />
<maxSizeRollBackups value="100" />
<maximumFileSize value="100MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="INFO" />
</filter>
</appender>
<appender name="Worker2" type="log4net.Appender.RollingFileAppender">
<file value="logs\Worker2.log" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<datePattern value="ddMMyyyy" />
<maxSizeRollBackups value="100" />
<maximumFileSize value="100MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="INFO" />
</filter>
</appender>
<appender name="Worker3" type="log4net.Appender.RollingFileAppender">
<file value="logs\3.log" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<datePattern value="ddMMyyyy" />
<maxSizeRollBackups value="100" />
<maximumFileSize value="100MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="INFO" />
</filter>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="DebugLog" />
<appender-ref ref="ErrorLog" />
</root>
<logger name="Worker1">
<level value='DEBUG'/>
<appender-ref ref="Worker1" />
</logger>
<logger name="Worker2">
<level value='DEBUG'/>
<appender-ref ref="Worker2" />
</logger>
<logger name="Worker3">
<level value='DEBUG'/>
<appender-ref ref="Worker3" />
</logger>
</log4net>
Первая проблема, с которой я столкнулся, заключается в том, что все сообщения, записанные в класс Worker1, записываются в файл Debug.log и файл Worker1.log.Я не хочу, чтобы они записывались в Debug.log, если они уже записаны в Worker1.log.
Я могу обойти это, изменив раздел, добавив additivity = false.В этом случае он записывает в журнал Worker1.log, а не в файл Debug.log.
Тем не менее, это предотвращает запись ошибок в Error.log. Что происходит, если я устанавливаю additivity = "false"и регистрируйте ошибку, она записывается в Worker1.log, но не записывается в Error.log.
Есть ли способ применить аддитивность только к сообщениям отладки / информации, чтобы яможет иметь сообщения отладки в Worker1.log, сообщения об ошибках в Error.log и любые сообщения отладки, которые не относятся к регистратору в файле debug.log?