Я сослался на это Обновить целевое имя файла NLog во время выполнения и многие другие ссылки, но ни одна из них не работает в моем случае. Я инициализирую регистратор, используя
private Logger logger = LogManager.GetCurrentClassLogger();
Все сообщения журнала ставятся в очередь, затем очищаются с использованием таймера.
this.messageQueue = new ConcurrentQueue<NotificationMessagePacket>();
this.timer = new System.Timers.Timer(1000);
this.timer.Elapsed += (o, e) =>
{
if (!isWriting)
{
lock (_lockObject)
{
isWriting = true;
NotificationMessagePacket packet;
while (this.messageQueue.TryDequeue(out packet) && packet != null)
{
try
{
if (!string.IsNullOrWhiteSpace(packet.DetailMessage))
this.Infolog(packet);
}
catch (Exception ex)
{
ObjectUtils.EventLogWriteError("NotificationMessagePacket emptying error : " + ex.ToString(),
EventLogEntryType.Warning);
}
}
}
isWriting = false;
}
};
this.timer.Start();
Я пытаюсь сбросить имя файла моей цели, используя следующий код:
LoggingConfiguration configuration = LogManager.Configuration;
var wrapper = (AsyncTargetWrapper)configuration.FindTargetByName("log");
var target = (FileTarget)wrapper.WrappedTarget;
string path = Path.Combine(basePath, "Test", "Log", string.Concat(DateTime.Now.ToString("dd"), "_", DateTime.Now.ToString("MMMM"), "_", DateTime.Now.Year + @"\AppLogs.txt"));
if (!string.IsNullOrEmpty(message.ProcessId))
path = Path.Combine(basePath, "Test", "Log", string.Concat(DateTime.Now.ToString("dd"), "_", DateTime.Now.ToString("MMMM"), "_", DateTime.Now.Year + @"\" + message.ProcessId + ".txt"));
target.FileName = path;
target.ConcurrentWrites = false;
LogManager.Configuration = configuration;
LogManager.ReconfigExistingLoggers();
Но иногда сообщения журнала не записываются в соответствующий файл.