網站首頁 編程語言 正文
.net core是內置了日志系統的,本文這里簡單的介紹一下它的基本用法。如下是一個簡單的示例:?
var service = new ServiceCollection()
.AddLogging(logging => { logging.AddConsole(); });
var provider = service.BuildServiceProvider();
var logFactory = provider.GetService<ILoggerFactory>();
var logger = logFactory.CreateLogger("MyLogger");
logger.LogInformation("hello world. {0}", DateTime.Now);
主要步驟如下:
在DI服務中通過AddLogging的配置日志服務
通過DI服務獲取ILoggerFactory
通過日志工廠創建ILogger
通過ILogger寫日志
需要注意的是,日志是異步輸出的,如果調用logger.LogInformation后程序馬上結束,是不會有日志輸出的。
ILogger和ILogger<T>
ILogger是我們實際用-來記錄日志的對象,前面的例子已經演示了它的使用方法,在.net core日志系統中,還提供了另一個接口ILogger<T>,它的創建方式如下:
var?logger?=?logFactory.CreateLogger<Program>();
ILogger<T>本身也是繼承自ILogger的,也就是說,他們的用法基本一樣,ILogger<T>的主要區別是創建的時候無需制定數據源名稱,它的數據源就是類名,也就是說,它和如下方式創建的ILogger功能基本上是一致的。
var?logger?=?logFactory.CreateLogger(typeof(Program).FullName);
那么為什么要創建一個ILogger<T>呢?我個人認為應為因為獲取它是不需要制定參數,更容易和DI框架集成,我們可以通過如下代碼獲取ILogger<T>,而不需要先獲取ILoggerFactory
var?logger?=?provider.GetService<ILogger<Program>>();
日志結構
.net core的日志系統支持不同的日志框架,并且對外統一了日志的格式,不管使用哪種庫,它的格式是一樣的。這樣的好處是切換日志框架時,上層應用無需修改。一個基本的日志樣例為:
info:?MyLogger[0]
hello world. 03/23/2019 22:37:58
它主要包括如下幾個部分:
日志級別:?日志級別定義在LogLevel枚舉中,它包含如下幾個級別:Trace、Debug、Information、Warning、Error、Critical。另外還有一個特殊級別None,它的值比Critical還高,主要用于關閉日志輸出, 當配置最小輸出級別時None時,由于它的級別比Critical還高,則所有的日志都不會輸出。
日志源: 用于標志日志的數據源,它是一個字符串,保存在具體的ILog對象中,本例中就是"MyLogger"
事件Id:?它標志了日志的序列號,大部分的時候都不會用到它
日志體:?日志內容
日志提供程序
ASP.NET Core 內置了如下幾種日志提供程序:
控制臺
調試
EventSource
EventLog
TraceSource
前面的示例中,如果要增加其他的日志提供程序,可以在DI框架初始化的時候進行。?
var service = new ServiceCollection()
.AddLogging(logging => { logging.AddConsole(); });
var provider = service.BuildServiceProvider();
var logFactory = provider.GetService<ILoggerFactory>();
var logger = logFactory.CreateLogger("MyLogger");
logger.LogInformation("hello world. {0}", DateTime.Now);
雖然系統內置了這些日志框架比較方便,但實際上用起來是不夠用的,比如說它不能輸出到文件,不過好在.net core提供了比較強大的擴展機制。
采用同樣的方式,我們也可以使用NLog、Seriallog等更為專業的日志框架,甚至他們已經做好了適配,直接拿來用都可以。
elmah.io
Gelf
JSNLog
KissLog.net
Loggr
NLog
Sentry
Serilog
Stackdriver
Log配置文件
一個典型的日志系統的配置文件如下:
{
"Logging": {
"LogLevel": { // 表示全局
"Default": "Warning" // 不指定CategoryName,應用于所有Category
},
"Console": { // 指定 ProviderName,僅針對于 ConsoleProvider
"Default": "Warning",
"Microsoft": "Error" // 指定CategoryName為Microsoft的日志級別為Error
}
}
}
我們可以通過AddConfiguration函數指定日志配置文件:?
var configBuilder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
var config = configBuilder.Build();
var service = new ServiceCollection()
.AddLogging(logging =>
{
logging.AddConfiguration(config.GetSection("Logging"));
logging.AddConsole();
});
原文鏈接:https://www.cnblogs.com/TianFang/p/10590953.html
相關推薦
- 2022-05-14 react中的axios模塊你了解嗎_React
- 2022-05-17 docker停止某個容器
- 2022-09-03 Docker?Buildx構建多平臺鏡像的實現_docker
- 2022-10-10 pycharm創建并使用虛擬環境的詳細圖文教程_python
- 2022-06-09 ASP.NET?Core中的通用主機HostBuilder_基礎應用
- 2022-05-20 SpringBoot配置文件簡介
- 2023-07-02 Python基于歐拉角繪制一個立方體_python
- 2022-10-23 C#泛型集合類型實現添加和遍歷_C#教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支