如何使用Microsoft.Extensions.Logging与Application Insights记录事件和指标

时间:2017-04-17 16:15:51

标签: c# logging .net-core azure-application-insights

ILogger接口只有一个Log方法:

void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter);

应用程序见解为我提供了这样一个丰富的API:

TrackMetric(string name, double value, IDictionary<string, string> properties = null);
TrackException(Exception exception, IDictionary<string, string> properties = null, IDictionary<string, double> metrics = null);
TrackTrace(string message, SeverityLevel severityLevel, IDictionary<string, string> properties);

我应该如何实现自定义ILogger并仍具有应用程序洞察的所有功能?我能想到的一种方法是定义不同的TState类型,如下所示:

class Trace
{
    public string Message {get;set;};
    public IDictionary<string, string> Properties;

    public Trace(string message, IDictionary<string, string> properties)
    {
        this.Message = message;
        this.Properties = properties;
    }    
}

然后当我需要追踪时,我做了类似的事情:

logger.Log<Trace>(LogLevel.Information, eventId, new Trace("sample trace",null));

通过这种方式,我根据trackXXX的类型(我为异常,度量和事件创建类型)切换Log<TState>实现中使用的TSTate方法。但是这看起来太复杂了,无法编写简单的跟踪,还有其他任何我遗漏的方法?

2 个答案:

答案 0 :(得分:1)

当您使用Application Insights SDK for ASP.NET Core并启用Application Insights时,会创建内部ILogger实现。您可以看到here它的工作原理。

因此,要回答您的问题,如果您使用的是用于ASP.NET Core的AI SDK,则不应该实现自己的ILogger。但是,如果必须,可以使用链接的实现作为示例。

答案 1 :(得分:0)

以下是App Insights的ILogger实现:https://github.com/Azure/azure-webjobs-sdk/blob/5140983cb163b20bf6af60afccebb705bc80ad80/src/Microsoft.Azure.WebJobs.Logging.ApplicationInsights/ApplicationInsightsLogger.cs

您可以执行大致相同的操作,包装TelemetryClient,但添加对事件和TrackDependency等其他内容的支持,可以从以下方式调用:

  

Log(LogLevel logLevel,EventId eventId,TState状态,异常异常,Func格式化程序)

基于EventId的值。