Использование кэшированного средства визуализации макета
Для решения, не требующего кода, используйте кэшированный модуль рендеринга макета:
<target name="txtFile"
xsi:type="File"
fileName="${cached:cached=true:inner=${date:format=yyyy-MM-dd HH-mm-ss}}.txt"
layout="${longdate} ${level} ${message}"/>
Использование настраиваемого средства визуализации макета
В приведенном выше решении фактически не используется время начала процесса. Вместо этого он использует время, когда первое сообщение журнала было направлено на эту цель (например, первый журнал в файл). Это может быть проблемой, если, например, вы хотите, чтобы файлы журнала располагались в каталоге, имя которого соответствует времени запуска процесса.
В этом случае можно использовать настраиваемое средство визуализации макета. Добавьте в свой проект следующий класс:
namespace NLog.LayoutRenderers
{
using NLog.Config;
[LayoutRenderer("processstarttime")]
public class ProcessStartTimeLayoutRenderer : DateLayoutRenderer
{
private Process process;
protected override void InitializeLayoutRenderer()
{
base.InitializeLayoutRenderer();
this.process = Process.GetCurrentProcess();
}
protected override void CloseLayoutRenderer()
{
if (this.process != null)
{
this.process.Close();
this.process = null;
}
base.CloseLayoutRenderer();
}
protected override void Append(System.Text.StringBuilder builder, LogEventInfo logEvent)
{
if (this.process != null)
{
builder.Append(this.process.StartTime.ToString(this.Format, this.Culture));
}
}
}
}
И используйте его следующим образом:
<target name="txtFile"
xsi:type="File"
fileName="${processstarttime:format=yyyy-MM-dd HH-mm-ss}.txt"
layout="${longdate} ${level} ${message}"/>
Это решение основано на модуле визуализации макета информации о процессе а>.
person
kshahar
schedule
11.06.2012