Как сделать так, чтобы разные экземпляры одного и того же приложения регистрировались в разных файлах с помощью log4net? - PullRequest
0 голосов
/ 22 декабря 2009

Мой вопрос похож на этот , но с несколько более простым контекстом. В моем случае у меня есть одно приложение, которое может быть запущено дважды (максимум) одновременно с разными параметрами командной строки, поэтому каждый экземпляр знает свой контекст.

Файл app.config определяет раздел log4net для настройки ведения журнала. Вот оно:

<log4net xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <appender name="MainAppender" type="log4net.Appender.FileAppender">
    <file value="${TMP}\NCAgent.log" />
    <appendToFile value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
  </appender>
  <appender name="DebugAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
  </appender>
  <root>
    <level value="ERROR" />
    <appender-ref ref="MainAppender" />
    <level value="INFO"/>
    <appender-ref ref="DebugAppender"/>
  </root>
</log4net>

И, конечно, у нас проблема в том, что два экземпляра приложения могут войти в один и тот же файл журнала, поэтому во время выполнения один из экземпляров (выбор хорошо определен и однозначен) загружает log4net XmlElement, изменяет имя файла журнала и настраивает log4net с использованием перегрузки XmlConfigurator.Configure(XmlElement).

Мне не нравится наш подход, и я считаю, что должно быть лучшее решение. Есть идеи?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 22 декабря 2009

См. этот ответ на аналогичный вопрос. .

Вы можете определить шаблон имени файла, включая что-то уникальное, например, отметку времени или идентификатор процесса.

0 голосов
/ 22 декабря 2009

Вы можете попытаться либо настроить имя файла FileAppender программно и добавить идентификатор процесса, либо создать подкласс FileAppender, чтобы автоматизировать указанное поведение с помощью подхода, основанного на конфигурации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...