0

我有一个像这样的自定义对象。

 public class Propertey
{
    public string Key { get; set; }
    public string Value { get; set; }
}
public class MonitoringEvent 
{
    public string AppName { get; set; }
    public string Service { get; set; }
    public string Fuction { get; set; }
    public string CorrelationId { get; set; }
    public List<Propertey> Properties { get; set; }
    public string EventName { get; set; }
    public DateTime TimeStamp { get; set; } = DateTime.UtcNow;
}

这个对象是从系统外部填充的,在我的函数应用程序中,我试图将它记录到 App Insights 中。

     [FunctionName("EventMonitoring")]
    public async Task Run([ServiceBusTrigger(
            "cta-event-monitoring",
            "monitoring",
            Connection = "ServiceBusConnectionString",
            IsSessionsEnabled = false)]string mySbMsg, ILogger log)
    {
        try
        {
            MonitoringEvent me = JsonConvert.DeserializeObject<MonitoringEvent>(mySbMsg);
           
            log.LogInformation("MonitoringEvent", me);
        }
        catch (Exception ex)
        {

            log.LogError("MonitoringEventError",ex);
        }
    }

当我看到应用洞察时,我在应用洞察中看不到“AppName”“服务”等属性。我在哪里可以找到它们?后来我也希望能够查询它们。但我在应用洞察中看到的都是这样的

在此处输入图像描述

4

1 回答 1

1

您需要使用日志消息模板进行日志记录。消息模板可以包含为其提供参数的占位符。为占位符使用名称。在您的情况下,这意味着您需要添加一个命名的模板位置

log.LogInformation("MonitoringEvent {Event}", me);

这将在应用程序洞察的跟踪中创建一个自定义属性“事件”。

在您当前的代码中,您没有提供占位符,因此参数不能放在某处并被忽略。

此外,请注意应用程序洞察力可能会用于.ToString()任何object参数,因此您最好的选择是仅用mySbMsg作参数。

于 2021-05-25T06:51:44.310 回答