2009-12-22 2 views
0

Мой вопрос похож на this one, но с несколько более простым контекстом. В моем случае у меня есть одно приложение, которое может выполняться дважды (не более) одновременно с разными параметрами командной строки, поэтому каждый экземпляр знает свой контекст.Как иметь разные экземпляры одного и того же журнала приложений для разных файлов с log4net?

Файл 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).

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

Спасибо.

ответ

0

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

0

См. this answer to a similar question..

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

Смежные вопросы