Мой вопрос похож на 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)
.
Мне не нравится наш подход и считаю, что должно быть лучшее решение. Есть идеи?
Спасибо.