2017-04-17 81 views
2

的ILogger接口只有一個登錄方法:如何使用Microsoft.Extensions.Logging與應用洞察記錄事件和指標

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方法我用於基於TSTate類型的Log<TState>實現(我爲Exception,Metric和Event創建類型)。但是,這看起來太複雜了,寫了一個簡單的跟蹤,我錯過了其他任何方式?

+0

問題是 - 爲什麼你需要使用ILogger接口?什麼是用例? – EranG

+0

這個用例是在dot net core中它是一個第一類公民,因爲它被自動注入(如果我實現提供者,工廠等等)並且自己記錄內部點網絡核心痕跡。此外,我想登錄到多個地方,如事件日誌,本地文件和應用程序見解等,這很容易(因爲有一些我可以添加和使用的提供者,而不是自己編寫所有這些) – AzureMinotaur

回答

1

當您使用Application Insights SDK for ASP.NET Core並啓用Application Insights時,將創建內部ILogger實現。你可以看到here它是如何工作的。

所以要回答你的問題,如果你使用的AI SDK爲ASP.NET核心,你不應該需要實現自己的ILogger。但是,如果您必須使用鏈接的實現作爲示例。

+0

好要知道有一個簡單的默認實現僅用於跟蹤,但它不允許我跟蹤自定義事件或指標。我想使用dotnet核心支持的「本地」ILogger接口來實現一個應用程序洞察記錄器,可以編寫自定義事件和指標(不僅僅是跟蹤)。不幸的是,這個鏈接的例子並沒有給出任何指導。 – AzureMinotaur

相關問題