Serilog 的使用

JeremyJone ... 2022-3-29 大约 1 分钟

# Serilog 的使用

Serilog 是第三方日志工具,拥有强大的插件功能和易用性。

# 安装

在 NuGet 中搜索并安装 SerilogSerilog.AspNetCore,并可以按需安装其 Sinks 下的各种插件。

# 使用

一个最简单的使用方式:

using Serilog;

publis static void Main(string[] args)
{
    using(var log = new LoggerConfiguration().WriteToConsole().CreateLogger()) {
        log.Information("This is a serilog info.");
    }
}
1
2
3
4
5
6
7
8

使用 Serilog 的 Log 对象进行配置:

Log.Logger = new LoggerConfiguration()
    // 对其自身限制
    .MinimumLevel.Debug()
    // 重写其它日志规则,捕获 Microsoft 高于 Debug 级别的日志并输出到 Serilog
    .MinimumLevel.Override("Microsoft", LogEventLevel.Debug)
    // 写入控制台
    .WriteTo.Console()
    // 写入文件,这里配置为生成文件按天
    .WriteTo.File(Path.Combine("Logs", @"serilog.log"), rollingInterval: RollingInterval.Day)
    // 写入 DB,这里使用 SQLServer,也可以通过插件使用其他数据库
    .WriteTo.MSSqlServer("xxx connectionString", autoCreateSqlTable: true, tableName: "Logs")
    .CreateLogger();

// 输出
Log.Information("Serilog information!!!");

// 最后一定要释放空间
Log.CloseAndFlush();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

一定要注意最后的释放空间,对于 .NET 项目,可以在 Program.cs 的主函数中使用 try 语句实现最后的释放:

try
{
    CreateHostBuilder(args).Build().Run();
}
finally
{
    Log.CloseAndFlush();
}
1
2
3
4
5
6
7
8

在 .NET 中,如果需要接管自身的日志系统,只需要在管道中使用 UseSerilog 即可:

Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder
            // 将 Serilog 注入中间件,将 Serilog 与 ILogger 绑定,其配置才会生效
            .UseSerilog()
            .UseStartup<Startup>();
    });
1
2
3
4
5
6
7
8

此时,在其他地方直接使用 .NET 提供好的 _logger 实例即可,十分方便。

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    private readonly ILogger<WeatherForecastController> _logger;

    public WeatherForecastController(ILogger<WeatherForecastController> logger)
    {
        _logger = logger;
    }

    [HttpGet]
    public IEnumerable<WeatherForecast> Get()
    {
        _logger.LogError("This is a Error from controller");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17