Log4Net, Невозможно использовать несколько RollingFileAppenders одновременно

У меня странная проблема. Я пытаюсь создать несколько скользящих файловых аппендеров, ссылающихся на один и тот же файл, но используя только один из этих аппендеров одновременно.

Дело в том, если я объявлю своего аппендера следующим образом:

<appender name="APP1" type="log4net.Appender.RollingFileAppender">
  <file value="C:\Log.txt" />
  <layout type="log4net.Layout.PatternLayout,log4net">
    <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - message%newline" />
  </layout>
 </appender>
<logger name="APP1" additivity="false">
  <level value="DEBUG" />
  <appender-ref ref="APP1" />
</logger>
<appender name="APP2" type="log4net.Appender.RollingFileAppender">
  <file value="C:\Log.txt" />
  <layout type="log4net.Layout.PatternLayout,log4net">
    <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - message%newline" />
  </layout>
 </appender>
<logger name="APP2" additivity="false">
  <level value="DEBUG" />
  <appender-ref ref="APP2" />
</logger>

Тогда мой регистратор "APP1" без проблем пишет в файл, но не в регистратор "APP2", как если бы он получал только первый регистратор. Очевидно, что если я сделаю два переключателя регистратора, все будет работать для "APP2", но не для "APP1"

Кроме того, когда не удается добавить, я вижу это в окне отладки:

log4net: Opening file for writing [C:\Log.txt] append [True]
log4net: Opening file for writing [C:\Log.txt] append [True]

Что, я думаю, означает, что это добавляется, но, как ни странно, это не так. И в рабочем сценарии я не вижу эти журналы. Любая подсказка с благодарностью! Спасибо за ваше время

1 ответ

Может быть, вы можете написать это так:

<root>
    <level value="DEBUG" />
    <appender-ref ref="APP1" />
    <appender-ref ref="APP2" />
</root>

Вот файл конфигурации, который использует несколько приложений. Вы можете найти его в http://logging.apache.org/log4net/release/manual/configuration.html

<log4net>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
        <!-- Pattern to output the caller's file name and line number -->
        <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
    </layout>
</appender>

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
    <file value="example.log" />
    <appendToFile value="true" />
    <maximumFileSize value="100KB" />
    <maxSizeRollBackups value="2" />

    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%level %thread %logger - %message%newline" />
    </layout>
</appender>

<root>
    <level value="DEBUG" />
    <appender-ref ref="Console" />
    <appender-ref ref="RollingFile" />
</root>

Возможно, что используется несколько приложений, но вы не можете использовать несколько FileAppenders(или RollingFileAppenders) для входа в один и тот же файл. Поэтому, если вы измените приложение APP2 для входа в другой файл, это сработает.

<appender name="APP2" type="log4net.Appender.RollingFileAppender">
  <file value="C:\Log2.txt" />
  <layout type="log4net.Layout.PatternLayout,log4net">
    <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - message%newline" />
  </layout>
</appender>

Проблема может быть в том, что log4net не может получить доступ к одному и тому же файлу одновременно разными FileAppenders.

Другие вопросы по тегам