您好,登錄后才能下訂單哦!
本篇內容介紹了“.Net Core中如何自定義日志組件”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
在日志工廠記錄器(ILoggerFactory
)中實現將日志記錄提供器(ILoggerProvider
)對象都可以集成到Logger
對象組合中,這樣的話,我們就可以通過基于ILoggerProvider
自定義日志記錄程序集成到Logger
中,再創建寫日志定義Ilogger
,自定義日志記錄器實現日志的輸出方式,這樣實現自定義日志記錄工具。
在這個過程中,日志記錄器ILogger
中的Log()方法會記錄執行日志,通過在ILoggerFactory
產生的是ILogger
類型(也就是我們最終使用的Logger
),其Log()方法是依次調用Logger
中包含的LoggerInformation[]
數組中的ILogger
。而ILoggerProvider
產生的為各類不同的XxxLogger(也就是上面說的Logger
中的LoggerInformation
數組包含的如ConsoleLogger、DebugLogger
),其Log()方法是把日志寫到具體的目標上去,所以我們自定義的日志程序也可以在日志記錄器工廠中實現添加日志程序,達到將日志寫到具體目標的作用。
創建一個自定義Logger,目的是將指定的等級日志輸出到控制臺。所以我們創建一個ExtensionLogger
的類,指定輸出的日志等級。所以在這之前,我們需要配置一下輸入日志的等級,因此我們需要增加一個等級的配置類ExtensionsConfiguration
。
在ExtensionsConfiguration
中,
public class ExtensionsConfiguration { /// <summary> /// 日志等級 /// </summary> public LogLevel LogLevel { get; set; } = LogLevel.Warning; }
再自定義日志記錄類ExtensionLogger
,實現接口ILogger
,
public class ExtensionsLogger : ILogger { private readonly ExtensionsConfiguration _config; public ExtensionsLogger(ExtensionsConfiguration extensionsConfiguration) { _config = extensionsConfiguration; } public IDisposable BeginScope<TState>(TState state) { return null; } public bool IsEnabled(LogLevel logLevel) { return logLevel == _config.LogLevel; } public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter) { if (!IsEnabled(logLevel)) { return; } Console.WriteLine($" {logLevel} - {eventId.Id} : " + formatter(state, exception)); } }
根據ILogger
接口實現,其中實現Log()
接口方法,將日志輸出到指定目標,這里是輸出到控制臺,在設置了日志等級的情況條件下,當滿足條件后,才能輸出對應的日志。
在創建了日志輸出記錄后,我們同時需要提供一個日志程序來增加和創建上面的Logger
記錄,所以我們通過自定義日志提供器類ExtensionsLoggerProvider
,實現ILoggerProvider
類。
public class ExtensionsLoggerProvider : ILoggerProvider { private readonly ExtensionsConfiguration _config; public ExtensionsLoggerProvider(ExtensionsConfiguration extensionsConfiguration) { _config = extensionsConfiguration; } public ILogger CreateLogger(string categoryName) { return new ExtensionsLogger(_config); } public void Dispose() { } }
基于ILoggerProvider
接口實現自定義類,實現方法CreateLogger
,來創建上面的日志記錄。
在Startup.cs中,通過Configure
方法調用配置日志記錄。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env , ILoggerFactory loggerFactory) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } // 注入ILogggerFactory,然后配置參數 //添加日志等級 loggerFactory.AddProvider(new ExtensionsLoggerProvider(new ExtensionsConfiguration { LogLevel= LogLevel.Warning })); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
在此之前,我們可以清空默認的配置,然后根據日志等級,在控制臺中輸出對應的日志記錄。
在等級為Information
情況下,輸出效果如下:
這個就是我們通過自定義的方式實現的按日志等級輸出的記錄。
第一步:為LoggerFactory擴張一個方法,提供增加日志寫文件方式的入口。相關的配置來自appsettings.json
第二步:實現我們的logger提供程序,實現ILoggerProvider接口,關鍵方法CreateLogger,創建真正寫日志的logger。對當前的logger可以做適當的緩存,配置logger
第三步:實現我們的logger,實現ILogger接口。真正將log寫入file。
“.Net Core中如何自定義日志組件”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。