【问题标题】:NLog webservice target, slack icon based on log levelNLog webservice 目标,基于日志级别的松弛图标
【发布时间】:2019-03-21 17:56:30
【问题描述】:

我是 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】:

    您可以使用 ${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

    【讨论】:

      猜你喜欢
      • 2023-01-13
      • 1970-01-01
      • 2022-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      相关资源
      最近更新 更多