带有 bufferingwrapper 和 autoflushwrapper 的 NLog MailTarget:事件的相反顺序?
NLog MailTarget with bufferingwrapper and autoflushwrapper: reverse order of events?
我正在使用以下结构:
<target name="MailOnError" xsi:type="AutoFlushWrapper" condition="level >= LogLevel.Error" flushOnConditionOnly="true">
<target name="MailBuffer" xsi:type="BufferingWrapper" bufferSize="250" overflowAction="Discard">
<-- note: mail config has been removed -->
<target xsi:type="Mail"
name="email"
header="Error in ${processname}:${newline}
Machine: ${machinename}${newline}
Proces: ${processname}${newline}
User: ${environment-user}${newline}
${newline}
${newline}"
layout="${date:format=HH\:mm\:ss}: ${message} (in ${callsite})${newline}"
/>
</target>
这几乎可以很好地实现我的目标:收到一封出错的电子邮件,其中嵌入了最新的日志条目以提供有关错误的一些上下文。
如果我在电子邮件消息的顶部看到错误就好了(或者,更好的是,按降序接收日志条目)。
如何做到这一点(如果可能,无需编写我自己的自定义目标)?
你需要这样的东西:
[Target("ReverseOrderWrapper", IsWrapper = true)]
public class ReverseOrderWrapper : WrapperTargetBase
{
protected override void Write(IList<AsyncLogEventInfo> logEvents)
{
// Some re oder logic
var reorderEvents = logEvents.Reverse().ToArray();
WrappedTarget.WriteAsyncLogEvents(reorderEvents);
}
}
注册(尽快),NLog 4.7+ 语法
NLog.LogManager.Setup().SetupExtensions(s =>
s.RegisterTarget<ReverseOrderWrapper>("ReverseOrderWrapper")
);
用法:
<target name="MailOnError" xsi:type="AutoFlushWrapper" condition="level >= LogLevel.Error" flushOnConditionOnly="true">
<target name="MailBuffer" xsi:type="BufferingWrapper" bufferSize="250"
overflowAction="Discard">
<target name="Reoder" xsi:type="ReverseOrderWrapper">
<-- note: mail config has been removed -->
<target xsi:type="Mail"
name="email"
header="Error in ${processname}:${newline}
Machine: ${machinename}${newline}
Proces: ${processname}${newline}
User: ${environment-user}${newline}
${newline}
${newline}"
layout="${date:format=HH\:mm\:ss}: ${message} (in ${callsite})${newline}"
/>
</target>
</target>
</target>
我正在使用以下结构:
<target name="MailOnError" xsi:type="AutoFlushWrapper" condition="level >= LogLevel.Error" flushOnConditionOnly="true">
<target name="MailBuffer" xsi:type="BufferingWrapper" bufferSize="250" overflowAction="Discard">
<-- note: mail config has been removed -->
<target xsi:type="Mail"
name="email"
header="Error in ${processname}:${newline}
Machine: ${machinename}${newline}
Proces: ${processname}${newline}
User: ${environment-user}${newline}
${newline}
${newline}"
layout="${date:format=HH\:mm\:ss}: ${message} (in ${callsite})${newline}"
/>
</target>
这几乎可以很好地实现我的目标:收到一封出错的电子邮件,其中嵌入了最新的日志条目以提供有关错误的一些上下文。
如果我在电子邮件消息的顶部看到错误就好了(或者,更好的是,按降序接收日志条目)。 如何做到这一点(如果可能,无需编写我自己的自定义目标)?
你需要这样的东西:
[Target("ReverseOrderWrapper", IsWrapper = true)]
public class ReverseOrderWrapper : WrapperTargetBase
{
protected override void Write(IList<AsyncLogEventInfo> logEvents)
{
// Some re oder logic
var reorderEvents = logEvents.Reverse().ToArray();
WrappedTarget.WriteAsyncLogEvents(reorderEvents);
}
}
注册(尽快),NLog 4.7+ 语法
NLog.LogManager.Setup().SetupExtensions(s =>
s.RegisterTarget<ReverseOrderWrapper>("ReverseOrderWrapper")
);
用法:
<target name="MailOnError" xsi:type="AutoFlushWrapper" condition="level >= LogLevel.Error" flushOnConditionOnly="true">
<target name="MailBuffer" xsi:type="BufferingWrapper" bufferSize="250"
overflowAction="Discard">
<target name="Reoder" xsi:type="ReverseOrderWrapper">
<-- note: mail config has been removed -->
<target xsi:type="Mail"
name="email"
header="Error in ${processname}:${newline}
Machine: ${machinename}${newline}
Proces: ${processname}${newline}
User: ${environment-user}${newline}
${newline}
${newline}"
layout="${date:format=HH\:mm\:ss}: ${message} (in ${callsite})${newline}"
/>
</target>
</target>
</target>