nlog - NLog MailTarget with bufferingwrapper and autoflushwrapper: reverse order of events?
问题描述
I'm using the following structure:
<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>
This works almost fine to achieve my goal: receiving an e-mail on error, with the most recent log-entries embedded to have some context about the error.
It would be nice if I get the error on the top of my e-mail-message (or, even better, receive the log-entries in descending order). How can this be done (if possible without writing my own custom 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>
推荐阅读
- php - 正则表达式转换版本错误
- mysql - MySQL - 选择查询错误 1052 上的内部联接
- security - 在 python3 中使用套接字对 TCP 包进行分段并使其重叠?
- jwt - 将 google id_token 交换为一组 keycloak 令牌时出现 invalid_token 错误
- php - 为 foreach() laravel 关系提供的参数无效
- php - PHP我需要在表格中总结奇数和偶数
- python-3.6 - 根据tradingview计算RSI指标?
- python - 站点包中没有 django 文件
- excel - 在 Excel 中加入(匹配)多个列
- javascript - 为什么在 React Hooks 中排序后数组不更新?