最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.NET?Core的日志系統(tǒng)介紹

 更新時間:2022年07月07日 17:23:09   作者:天方  
這篇文章介紹了ASP.NET?Core的日志系統(tǒng),文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

.net core是內置了日志系統(tǒng)的,本文這里簡單的介紹一下它的基本用法。如下是一個簡單的示例: 

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

  • 通過日志工廠創(chuàng)建ILogger

  • 通過ILogger寫日志

需要注意的是,日志是異步輸出的,如果調用logger.LogInformation后程序馬上結束,是不會有日志輸出的。

ILogger和ILogger<T>

ILogger是我們實際用-來記錄日志的對象,前面的例子已經(jīng)演示了它的使用方法,在.net core日志系統(tǒng)中,還提供了另一個接口ILogger<T>,它的創(chuàng)建方式如下:

var?logger?=?logFactory.CreateLogger<Program>();

ILogger<T>本身也是繼承自ILogger的,也就是說,他們的用法基本一樣,ILogger<T>的主要區(qū)別是創(chuàng)建的時候無需制定數(shù)據(jù)源名稱,它的數(shù)據(jù)源就是類名,也就是說,它和如下方式創(chuàng)建的ILogger功能基本上是一致的。

var?logger?=?logFactory.CreateLogger(typeof(Program).FullName);

那么為什么要創(chuàng)建一個ILogger<T>呢?我個人認為應為因為獲取它是不需要制定參數(shù),更容易和DI框架集成,我們可以通過如下代碼獲取ILogger<T>,而不需要先獲取ILoggerFactory

var?logger?=?provider.GetService<ILogger<Program>>();

日志結構

.net core的日志系統(tǒng)支持不同的日志框架,并且對外統(tǒng)一了日志的格式,不管使用哪種庫,它的格式是一樣的。這樣的好處是切換日志框架時,上層應用無需修改。一個基本的日志樣例為:

info: MyLogger[0]
hello world. 03/23/2019 22:37:58

它主要包括如下幾個部分:

  • 日志級別: 日志級別定義在LogLevel枚舉中,它包含如下幾個級別:Trace、Debug、Information、Warning、Error、Critical。另外還有一個特殊級別None,它的值比Critical還高,主要用于關閉日志輸出, 當配置最小輸出級別時None時,由于它的級別比Critical還高,則所有的日志都不會輸出。

  • 日志源: 用于標志日志的數(shù)據(jù)源,它是一個字符串,保存在具體的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);

雖然系統(tǒng)內置了這些日志框架比較方便,但實際上用起來是不夠用的,比如說它不能輸出到文件,不過好在.net core提供了比較強大的擴展機制。

采用同樣的方式,我們也可以使用NLog、Seriallog等更為專業(yè)的日志框架,甚至他們已經(jīng)做好了適配,直接拿來用都可以。

  • elmah.io

  • Gelf

  • JSNLog

  • KissLog.net

  • Loggr

  • NLog

  • Sentry

  • Serilog

  • Stackdriver

Log配置文件

一個典型的日志系統(tǒng)的配置文件如下:

{
    "Logging": { 
        "LogLevel": { // 表示全局 
            "Default": "Warning" // 不指定CategoryName,應用于所有Category 
        },
        "Console": { // 指定 ProviderName,僅針對于 ConsoleProvider 
            "Default": "Warning",
            "Microsoft": "Error" // 指定CategoryName為Microsoft的日志級別為Error
        }
    }
}

我們可以通過AddConfiguration函數(shù)指定日志配置文件: 

var configBuilder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
var config        = configBuilder.Build();

var service = new ServiceCollection()
    .AddLogging(logging =>
    {
        logging.AddConfiguration(config.GetSection("Logging"));
        logging.AddConsole();
    });

到此這篇關于ASP.NET Core日志系統(tǒng)的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

最新評論

岗巴县| 佛教| 弋阳县| 依兰县| 如皋市| 云梦县| 盐津县| 常德市| 布尔津县| 卢氏县| 长丰县| 来安县| 河西区| 青神县| 郸城县| 铜鼓县| 舟曲县| 兰州市| 叙永县| 南宫市| 洪江市| 当涂县| 西充县| 宜春市| 加查县| 郁南县| 四川省| 马公市| 涟源市| 浪卡子县| 满洲里市| 垦利县| 麻城市| 冕宁县| 舟曲县| 乌鲁木齐县| 耒阳市| 陈巴尔虎旗| 彭山县| 旺苍县| 琼中|