NLog webservice目标,基于日志级别的松弛图标

问题描述 投票:1回答:1

我是NLog的新手,正在寻找解决方案来解决我的目标。

我想要警告,并且要使用日志级别特定图标推送到松弛的通道。从技术上讲,我有这个工作。我有2对目标/记录器,它们被硬编码以仅捕获警告,以及错误及以上,并且将“警告”或“错误”图标硬编码到布局模板中。

<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">

有没有办法更好地完成这个?我想要警告级别映射到:警告:等。

我也想在那里推送一些信息级别的东西。为此,我创建了一个始终记录到松弛通道的命名记录器,但如果它们是警告或以上,则会产生重复的消息。

<logger name="noticeLogger" writeTo="slackInfoTarget" />

我猜这种方法比我自己想出的更优雅。

nlog
1个回答
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
});

How to write a custom layout renderer

© www.soinside.com 2019 - 2024. All rights reserved.