Log4Net и несколько файлов журнала - PullRequest
1 голос
/ 21 октября 2011

В Интернете есть несколько сообщений на одну и ту же тему, и я также могу написать несколько файлов журнала из моего приложения Windows Forms.Но мое требование немного отличается.

Мое приложение имеет два режима работы, например, режим "BuySomething" и режим "SellSomeOtherThing".И когда он находится в режиме «BuySomething», я хочу записать в Log_BuySomething.txt и Log_SellSomeOtherThing.txt в противном случае (один режим будет выбран точно).

В файле app.config у меня есть то жеструктура, как в последнем посте StackOverflow Вопрос .
Моя проблема заключается в том, что при выполнении кода XmlConfigurator.Configure(); создаются пустые файлы журнала имен, упомянутых в обоих LogFileAppenders в приложении.Конфигурационный файлЯ думал, что следующий код решит эту проблему, но это не так:

if (mode == BuySomeThing)
{
    logger = LogManager.GetLogger("LogFileAppender1");
}
else
{
    LogManager.GetLogger("LogFileAppender2");
}
XmlConfigurator.Configure();

Как я могу убедиться, что для этого экземпляра приложения создан только соответствующий файл журнала?

1 Ответ

1 голос
/ 21 октября 2011

Если я вас понимаю, ваше приложение не переключается между режимами.

Если это так, то я подозреваю, что использование вашего кода создаст оба файла, но на самом деле только запись в один.

Если важно избавиться от файла нулевого байта, вы можете попробовать что-то вроде:

log4net.GlobalContext.Properties["MyLogFileName"] = 
   (mode == BuySomeThing) ? "Log_BuySomething.txt" : "Log_SellSomeOtherThing.txt" ;

XmlConfigurator.Configure();

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

<appender name="FileAppender" type="log4net.Appender.FileAppender">
   <file type="log4net.Util.PatternString" value="Logfiles\%property{MyLogFileName}" />

    <appendToFile value="true" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>

Это должно закончиться созданием только одного файла. (В этом примере он будет создан в папке logfiles).

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