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
方法。但是这看起来太复杂了,无法编写简单的跟踪,还有其他任何我遗漏的方法?
答案 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的值。