为了账号安全,请及时绑定邮箱和手机立即绑定

具有 Application Insights 目标的 NLog 不记录自定义参数和异常

具有 Application Insights 目标的 NLog 不记录自定义参数和异常

C#
青春有我 2022-12-31 13:27:18
我在 WebJobs 项目中使用 Nlog 和 Application Insights 作为目标来记录遥测。如果我只记录如下消息,一切似乎都在工作。_logger.Log(LogLevel.Info, "Job completed");我可以在 application insights 中看到带有消息“Job completed”的跟踪信息但我想记录一些参数以及如下消息。_logger.Info($"Job created successfully", req.UserId, req.ReportName, jobId, searchString);或者像下面这样catch (Exception ex){    _logger.Error(ex, "Error creating the job", req.UserId, req.ReportName, searchString);    throw;}我期待应用程序洞察中的跟踪,其中包含我随消息传递的参数。但我只能看到消息,看不到任何参数或异常详细信息。我错过了什么?
查看完整描述

2 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

您可以使用 LogEventInfo,然后在其属性中添加参数。


示例代码:


对于日志级别信息:


            LogEventInfo eventInfo = new LogEventInfo(LogLevel.Info, "event1", "this is a info111");

            eventInfo.Properties["myname"]= "myname is ddd";

            eventInfo.Properties["myid"] = "myid is ddd";

            eventInfo.Properties["myjobid"] = "myjobid is ddd";

            log.Log(eventInfo);

对于错误日志级别:


        #in you code, you can change the new Exception() to your own exception

        LogEventInfo eventinfo2 = new LogEventInfo(LogLevel.Error, null,null,null,null,new Exception("anexception222"));

        eventinfo2.Properties["errormessage"] = "thi si a error message";

        eventinfo2.Properties["myname"] = "myname is ddd";

        eventinfo2.Properties["myid"] = "myid is ddd";

        eventinfo2.Properties["myjobid"] = "myjobid is ddd";

        log.Log(eventinfo2);

然后就可以在azure portal中看到参数了:

在此处输入图像描述


查看完整回答
反对 回复 2022-12-31
?
千万里不及你

TA贡献1784条经验 获得超9个赞

另一个可能更简单的选择是使用结构化日志记录。

例如

_logger.Info("Job {JobId} created successfully for {User} on {ReportName} with {Search}", jobId, req.UserId, req.ReportName, searchString);

这将创建事件属性 JobId、User、ReportName 和 Search。

另请参阅NLog - 如何使用结构化日志记录

注意:所以在这种情况下不要使用内插字符串。


查看完整回答
反对 回复 2022-12-31
  • 2 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信