使用 NLog 登录到 Microsoft Teams 中的频道

Log to a channel in Microsoft Teams with NLog

Objective

使用 NLog 从控制台程序将错误记录到 Microsoft Teams。

问题

能够登录到控制台,但不能登录到 Teams

代码

配置:

<targets>
    <target xsi:type="Console" name="console"/>
    <target xsi:type="WebService"
         name="microsoft-teams"
         url="https://outlook.office.com/webhook/abcd"
         protocol='JsonPost' 
         encoding='UTF-8' 
         includeBOM='false' >
    </target>
</targets>
<rules>
    <logger name="*" minlevel="Info" writeTo="console" />
    <logger name='*' writeTo='microsoft-teams' />
</rules>

记录代码:

private static Logger logger = LogManager.GetCurrentClassLogger();
public static void Main(string[] args) {

    logger.Error("{'text':'test'}");
    logger.Fatal("Sample fatal error message");

}

控制台目标很好地显示了错误。但是 Teams 频道没有日志, nlog-internal.log 显示

System.Net.WebException: The remote server returned an error: (400) Bad Request. at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)

任何见解将不胜感激!

您至少需要发送一些参数,请参阅示例网络服务器目标:

<target type='WebService'
        name='ws'
        url='http://localhost:1234/logme'
        protocol='HttpPost'
        encoding='UTF-8'   >
    <parameter name='param1' type='System.String' layout='${message}'/> 
    <parameter name='param2' type='System.String' layout='${level}'/>
</target>

如果这仍然无效,我建议使用 Fiddler

检查通话

我知道有点晚了,但你可以试试我创建的 NLog 扩展。 https://github.com/jedipi/NLog.Targets.MicrosoftTeams