我是NLog的新手,正在努力寻找解决方案。
我想发出警告,并且将其推送到带有日志级别特定图标的闲置频道。从技术上讲,我已经做到了。我有两对目标/记录器,它们被硬编码为仅捕获警告,错误和以上错误,并且将“警告”或“错误”图标硬编码为布局模板。
<target xsi:type="WebService"
name="slackWarningTarget"
url="https://hooks.slack.com/services/xx/xx/xx"
protocol="JsonPost"
encoding="utf-8"
>
<parameter name="text" type="System.String" layout=":warning: ${machinename} ${message}"/>
<parameter name="channel" type="System.String" layout="xx"/>
</target>
和
<logger name="*" minlevel="Warn" maxlevel="Warn" writeTo="slackWarningTarget">
有没有更好的方法来做到这一点?我希望警告级别映射到:warning :,等等。
我也希望将一些信息级别的东西也推送到那里。为此,我创建了一个命名记录器,该记录器始终记录到松弛通道,但是如果警告或以上警告消息,则会导致重复消息。
<logger name="noticeLogger" writeTo="slackInfoTarget" />
我猜这两种方法都比我自己想出的要优雅得多。
答案 0 :(得分:0)
您可以使用${when}从配置中完成此操作,例如
layout="${when:when=${level}=='Warn':inner=\:warning\::else:${when:when=${level}== 'Error':inner=\:error\::else:todo}}"
但是很快就会变得笨拙
另一个选择是注册自定义布局渲染器:
// register in the start of your program (e.g. main, app_start)
// usage ${slackIcon}
LayoutRenderer.Register("slackIcon", logEvent =>
{
if (logEvent.Level == LogLevel.Warn)
{
return ":warning:";
}
if (logEvent.Level == LogLevel.Error)
{
return ":error:";
}
return ":other:";
//etc
});