C# 具有应用程序洞察目标的NLog不';t记录自定义参数和异常
我在WebJobs项目中将Nlog与Application Insights一起用作记录遥测的目标。如果我像下面那样记录消息,一切似乎都正常C# 具有应用程序洞察目标的NLog不';t记录自定义参数和异常,c#,.net,azure,nlog,azure-application-insights,C#,.net,Azure,Nlog,Azure Application Insights,我在WebJobs项目中将Nlog与Application Insights一起用作记录遥测的目标。如果我像下面那样记录消息,一切似乎都正常 _logger.Log(LogLevel.Info, "Job completed"); _logger.Info($"Job created successfully", req.UserId, req.ReportName, jobId, searchString); 我可以在application insights中看到带有消息“作业已完成”的跟
_logger.Log(LogLevel.Info, "Job completed");
_logger.Info($"Job created successfully", req.UserId, req.ReportName, jobId, searchString);
我可以在application insights中看到带有消息“作业已完成”的跟踪信息
但是我想在下面的消息中记录一些参数
_logger.Log(LogLevel.Info, "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;
}
我希望application insights中包含我随消息传递的参数的跟踪。但我只能看到消息,而不能看到任何参数或异常详细信息
我错过了什么
编辑:
NLog nuget版本4.3.8和
Microsoft.ApplicationInsights.NLogTarget nuget版本2.4.1
更多代码:
try
{
var jobId = _reportingService.RequestReport(req.ReportName, searchString).Result;
_logger.Info($"Job created successfully", req.UserId, req.ReportName, jobId, searchString);
var output = new RetrieveReportDataRequest()
{
CreationRequest = new ReportCreationRequest()
{
ImmutableUserId = req.UserId,
...
},
SearchParameters = searchString,
JobId = jobId,
Created = DateTime.UtcNow,
};
outputQueueMessage = JsonConvert.SerializeObject(output, settings);
}
catch (Exception ex)
{
log.WriteLine(ex.Message);
_logger.Error(ex, "Error creating the job", req.UserId, req.ReportName, searchString);
throw;
}
您可以使用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中查看参数:
另一个可能更简单的选择是使用结构化日志记录 e、 g 这将创建事件属性JobId、User、ReportName和Search 另见
注意:所以在这种情况下不要使用插值字符串 这是一个webjob项目?你能再加一些代码吗?您正在使用的nuget包包括这个版本。谢谢。@IvanYang我已经编辑了这个问题并提供了更多详细信息。您好,您使用的是webjobs nuget软件包3.0.x或2.x?@IvanYang webjobs nuget版本是2.1。0@PNDev您可以实现自己的记录器,就像我们在工作区中所做的那样。如果你不知道如何让我知道,我可以提供一个例子作为回答谢谢伊万。这很有效。但是你知道为什么在这种情况下不使用LogEventInfo而使用objects数组的方法不起作用吗?@PNDev,猜猜看,也许appInsights没有实现它。几年前,appInsights中甚至不支持LogEventInfo.Properties作为属性。这促使他们实施它。