Можно ли изменить имя файла журнала для файлового приложения во время работы приложения? Это будет происходить несколько раз в день.
Попробую пояснить подробнее: мое приложение записывает прошивку на устройство. Все устройства, с которыми пользователь уже работал, находятся в сетке. Пользователь может запустить новый мастер записи или возобновить или перезапустить действие на уже запущенном устройстве. Я бы хотел вести журнал всех шагов, выполняемых пользователем для определенного устройства.
Например: когда пользователь работает на устройстве AB0124, я хочу записать в файл журнала под названием AB0124.log. Когда он закончит работу на этом устройстве и начнет работу на устройстве XY5618, я хочу записать эти действия в XY5618.log.
Я читал, что можно использовать свойство контекста (здесь и здесь и многие другие posts), но вы должны установить свойство перед созданием регистратора. Итак, вместо того, чтобы создавать регистратор в классе, я создаю его в своем методе после установки свойства. Но пока ничего не логируется.
Когда я устанавливаю имя файла, жестко закодированное в конфигурации, оно работает. Я что-то здесь упускаю?
Log4Net.config:
<appender name="StepsLogAppender" type="log4net.Appender.FileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
<file type="log4net.Util.PatternString" value="%property{LogPathModifier}" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{dd/MM/yyyy - HH:mm:ss} - %message%newline" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="StepsLogAppender" />
</root>
C #:
public void WriteStepInfo(string device, int step)
{
log4net.ThreadContext.Properties["LogPathModifier"] = string.Format("D:\\StepsDevice_{0}.txt", device);
var log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
log.Info(string.Format("Device {0} - step {1}.", device, step));
}
И в AssemblyInfo.cs:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]