欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

強(qiáng)大的 .NET 日志庫(kù)Serilog詳解

 更新時(shí)間:2025年03月05日 10:05:20   作者:江沉晚呤時(shí)  
Serilog是一個(gè)功能強(qiáng)大的.NET日志記錄庫(kù),支持多種日志級(jí)別、輸出方式和格式化選項(xiàng),具有可擴(kuò)展性和靈活性,通過(guò)本文,您可以了解Serilog的基礎(chǔ)知識(shí)、API使用、配置和一些常見(jiàn)示例,感興趣的朋友一起看看吧

Serilog 是一個(gè)功能強(qiáng)大的日志記錄庫(kù),專為 .NET 平臺(tái)設(shè)計(jì)。它提供了豐富的 API 和可插拔的輸出器及格式化器,使得開(kāi)發(fā)者能夠輕松定制和擴(kuò)展日志記錄功能。在本文中,我們將探索 Serilog 的基礎(chǔ)知識(shí)、API 使用、配置和一些常見(jiàn)的示例。

1. 日志級(jí)別

Serilog 支持多個(gè)日志級(jí)別,按照嚴(yán)重性從高到低排列如下:

  • Fatal: 程序無(wú)法繼續(xù)運(yùn)行,必須立即解決的問(wèn)題。
  • Error: 發(fā)生了錯(cuò)誤,需要處理。
  • Warning: 警告,需關(guān)注但不必立即處理。
  • Information: 提供有用的消息,通常用于調(diào)試。
  • Debug: 調(diào)試信息,幫助開(kāi)發(fā)者調(diào)試程序。
  • Verbose: 詳細(xì)的日志信息,通常用于復(fù)雜問(wèn)題的調(diào)試。

2. 日志輸出

Serilog 支持多種日志輸出方式,包括:

  • Console: 輸出到控制臺(tái)。
  • File: 輸出到文件。
  • Seq: 輸出到日志收集器 Seq。
  • Elasticsearch: 輸出到 Elasticsearch。

此外,Serilog 也支持自定義日志輸出器。

3. 日志格式

Serilog 提供了多種格式化日志消息的方式:

  • 簡(jiǎn)單文本格式:常見(jiàn)的日志輸出格式。
  • JSON 格式:適合結(jié)構(gòu)化日志。
  • Message Templates 格式:一種靈活的格式,允許在日志消息中插入占位符。

4. 安裝

Serilog 可以通過(guò) NuGet 安裝:

Install-Package Serilog

5. 基礎(chǔ)使用示例

在應(yīng)用程序中使用 Serilog 十分簡(jiǎn)單。以下是一個(gè)簡(jiǎn)單的控制臺(tái)日志輸出示例:

using Serilog;
class Program
{
    static void Main()
    {
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .WriteTo.Console()
            .CreateLogger();
        Log.Information("Hello, Serilog!");
        Log.CloseAndFlush();
    }
}

此代碼將在控制臺(tái)輸出 Hello, Serilog!。

6. 日志級(jí)別示例

Serilog 允許設(shè)置不同的日志級(jí)別。以下示例演示了如何記錄各種級(jí)別的日志消息:

using Serilog;
class Program
{
    static void Main()
    {
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Verbose()
            .WriteTo.Console()
            .CreateLogger();
        Log.Verbose("This is a verbose log message.");
        Log.Debug("This is a debug log message.");
        Log.Information("This is an informational log message.");
        Log.Warning("This is a warning log message.");
        Log.Error("This is an error log message.");
        Log.Fatal("This is a fatal log message.");
        Log.CloseAndFlush();
    }
}

7. 消息模板

Serilog 支持消息模板,允許開(kāi)發(fā)者在日志中使用占位符。以下示例展示了如何使用消息模板:

using Serilog;
class Program
{
    static void Main()
    {
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .WriteTo.Console(outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}")
            .CreateLogger();
        Log.Information("Hello, {Name}!", "Serilog");
        Log.CloseAndFlush();
    }
}

上述代碼將在控制臺(tái)輸出如下格式的日志:

2023-09-15 22:23:54.576 +08:00 [INF] Hello, Serilog!

8. 日志屬性

Serilog 支持在日志中添加附加屬性。以下示例展示了如何記錄額外的信息:

using Serilog;
class Program
{
    static void Main()
    {
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .WriteTo.Console()
            .CreateLogger();
        Log.Information("Processed {@Count} records in {Time} ms.", new { Count = 10, Time = 123 });
        Log.CloseAndFlush();
    }
}

此代碼會(huì)輸出:

Processed { Count: 10, Time: 123 } records in 0 ms.

9. 文件輸出配置

Serilog 允許將日志輸出到文件,并通過(guò) rollingInterval 設(shè)置日志滾動(dòng)方式。以下示例展示了如何按天滾動(dòng)文件并設(shè)置輸出模板:

Log.Logger = new LoggerConfiguration()
    .WriteTo.File(
        $"logs\\log-.txt", 
        rollingInterval: RollingInterval.Day, 
        outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}")
    .CreateLogger();
Log.Information("This is a log message!");
Log.CloseAndFlush();

這將創(chuàng)建類似于 log-20230914.txt 的文件,每天一個(gè)新文件。

10. 結(jié)構(gòu)化日志記錄

Serilog 支持結(jié)構(gòu)化日志記錄,這意味著可以將復(fù)雜的數(shù)據(jù)(如對(duì)象、集合等)以結(jié)構(gòu)化的方式存儲(chǔ)和輸出。例如:

using Serilog;
class Program
{
    static void Main()
    {
        var weather = new WeatherForecast
        {
            Date = DateTime.Now,
            TemperatureC = 22,
            Summary = "Sunny"
        };
        Log.Information("Weather forecast: {@Weather}", weather);
        Log.CloseAndFlush();
    }
}
public class WeatherForecast
{
    public DateTime Date { get; set; }
    public int TemperatureC { get; set; }
    public string Summary { get; set; }
}

此代碼將輸出類似于:

Weather forecast: {"Date":"2023-09-15T22:39:53.8634787+08:00","TemperatureC":22,"Summary":"Sunny","$type":"WeatherForecast"}

11. 日志過(guò)濾

Serilog 允許使用過(guò)濾器控制輸出。以下示例僅輸出錯(cuò)誤級(jí)別以上的日志:

using Serilog;
class Program
{
    static void Main()
    {
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .WriteTo.Console()
            .Filter.ByIncludingOnly(logEvent => logEvent.Level >= LogEventLevel.Error)
            .CreateLogger();
        Log.Verbose("This is a verbose log message.");
        Log.Error("This is an error log message.");
        Log.CloseAndFlush();
    }
}

此代碼只會(huì)在控制臺(tái)輸出錯(cuò)誤和更高嚴(yán)重級(jí)別的日志。

12. 擴(kuò)展與自定義輸出器

Serilog 支持自定義輸出器,允許開(kāi)發(fā)者將日志輸出到不同的目的地(例如 Elasticsearch、數(shù)據(jù)庫(kù)等)。以下是一個(gè)創(chuàng)建自定義控制臺(tái)輸出器的例子:

using Serilog;
using Serilog.Configuration;
using Serilog.Events;
public static class CustomConsoleSinkExtensions
{
    public static LoggerConfiguration CustomConsole(
        this LoggerSinkConfiguration sinkConfiguration,
        ITextFormatter formatter = null,
        LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum)
    {
        return sinkConfiguration.Sink(
            new CustomConsoleSink(formatter),
            restrictedToMinimumLevel);
    }
}
public class CustomConsoleSink : ILogEventSink
{
    private readonly ITextFormatter _formatter;
    public CustomConsoleSink(ITextFormatter formatter)
    {
        _formatter = formatter ?? throw new ArgumentNullException(nameof(formatter));
    }
    public void Emit(LogEvent logEvent)
    {
        var message = new StringWriter();
        _formatter.Format(logEvent, message);
        Console.WriteLine(message.ToString());
    }
}

然后可以通過(guò)以下方式將其添加到日志配置中:

Log.Logger = new LoggerConfiguration()
    .WriteTo.CustomConsole()
    .CreateLogger();

13. 總結(jié)

Serilog 是一個(gè)功能強(qiáng)大的 .NET 日志庫(kù),支持豐富的日志記錄方式、輸出方式和格式化選項(xiàng)。它的可擴(kuò)展性和靈活性使得開(kāi)發(fā)者能夠根據(jù)應(yīng)用程序的需求定制日志記錄方式。從簡(jiǎn)單的控制臺(tái)日志到復(fù)雜的結(jié)構(gòu)化日志和自定義輸出器,Serilog 都能輕松應(yīng)對(duì)。

希望本文對(duì)您理解 Serilog 和高效使用該庫(kù)有所幫助!

到此這篇關(guān)于強(qiáng)大的 .NET 日志庫(kù)Serilog的文章就介紹到這了,更多相關(guān).NET 日志庫(kù)Serilog內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論