Это очень распространенный вопрос, но я не смог получить ответ на работу. Вот мой файл конфигурации:log4net: Как установить имя файла журнала динамически?
<?xml version="1.0" encoding="utf-8"?>
<log4net>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="CraneUserInterface.log" />
<appendToFile value="true" />
<maxSizeRollBackups value="90" />
<rollingStyle value="Size" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date - %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFile" />
</root>
Но мне нужно определить фактическое имя файла журнала во время выполнения. Я нашел хороший пример here, но когда я пытаюсь выполнить цикл, возвращенный вызовом GetIterators(), я обнаружил, что эта коллекция пуста.
Мне нужно изменить имя «CraneUserInterface.log» на «CraneUserInterface_1.log», или 2 или 3, в зависимости от того, что программа читает во время выполнения. Как я могу это сделать?
Вот мой первый проход при использовании кода, представленный в этом примере:
static bool ChangeLogFileName(string AppenderName, string NewFilename)
{
// log4net.Repository.ILoggerRepository RootRep;
// RootRep = log4net.LogManager.GetRepository();
log4net.Repository.ILoggerRepository RootRep = m_logger.Logger.Repository;
foreach (log4net.Appender.IAppender iApp in RootRep.GetAppenders())
{
string appenderName = iApp.Name;
if (iApp.Name.CompareTo(AppenderName) == 0
&& iApp is log4net.Appender.FileAppender)
{
log4net.Appender.FileAppender fApp = (log4net.Appender.FileAppender)iApp;
fApp.File = NewFilename;
fApp.ActivateOptions();
return true; // Appender found and name changed to NewFilename
}
}
return false; // appender not found
}
Большое спасибо!
Несмотря на чтение в два раза, я понятия не имею, почему вы хотели бы сделать это. –
Это предназначено для использования в ноутбуке, который будет находиться в кабине крана на заводе для отжига. Завод имеет 3 крана. Поскольку я не нахожусь на заводе и не буду в ближайшем будущем, у меня есть симулятор, который претендует на то, чтобы быть всеми тремя кранами. Одновременно будет запущено 3 экземпляра этой программы. Мне нужно отслеживать события для каждого из 3-х кранов отдельно, и я, вероятно, должен избегать любых случаев, когда два экземпляра этой программы записываются в один и тот же файл журнала одновременно. –
Я думаю, что мой инстинкт кишки был прав. Вы пытаетесь решить неправильную проблему. –