使用 Serilog 框架记录日志

2023/7/6 10:13:38

Serilog 是一个用于.NET应用程序的日志记录开源库,配置简单,接口干净,并可运行在最新的.NET平台上,与其他日志库不同, Serilog 是以功能强大的结构化事件数据为基础构建的, 支持将日志输出到控制台、文件、数据库和其它更多的方式,支持参数化日志模板,非常灵活。

使用 Serilog 框架记录日志

接下来零度带大家在控制台程序中实践一下 Serilog 框架的简单配置,首先,使用 NuGet 方式安装 Serilog 核心库,其次安装控制台输出扩展库,如果你想将日志输出到其它存储介质,可安装其它扩展库,Serilog支持的扩展库是很多的。

    Install-Package Serilog
    Install-Package Serilog.Sinks.Console
    ```

然后引用命名空间:

`using Serilog;`

使用 LoggerConfiguration 创建 ILogger 对象:

var log = new LoggerConfiguration()
    .WriteTo.Console()
    .CreateLogger();
```

一般情况下,我们在整个应用程序中使用同一个 ILogger 对象就可以了,所以在首次启动的时候初始化即可。接下来就可以写日志了。

log.Information("Hello, 零度!");

如果您想在全局使用日志记录器,那么可以通过下面的方式将当前的日志记录器设置为全局对象,以后就可以当前程序的任何地方使用这个记录器了。

    Log.Logger = log;
    Log.Information("The global logger has been configured");
    ```

下面的示例将日志同时输出到控制台和文件中,而且日志最小记录级别设置为调试模式,首先安装程序库:

Install-Package Serilog
Install-Package Serilog.Sinks.Console
Install-Package Serilog.Sinks.File
```

在控制台中配置日志记录器,在 ASP.NET Core 中的配置类似:

    using System;
    using Serilog;

    namespace SerilogExample
    {
        class Program
        {
            static void Main()
            {
                Log.Logger = new LoggerConfiguration()
                    .MinimumLevel.Debug()
                    .WriteTo.Console()
                    .WriteTo.File("logs\\myapp.txt", rollingInterval: RollingInterval.Day)
                    .CreateLogger();

                Log.Information("Hello, world!");

                int a = 10, b = 0;
                try
                {
                    Log.Debug("Dividing {A} by {B}", a, b);
                    Console.WriteLine(a / b);
                }
                catch (Exception ex)
                {
                    Log.Error(ex, "Something went wrong");
                }

                Log.CloseAndFlush();
                Console.ReadKey();
            }
        }
    }
    ```

运行这个控制台应用程序,即可输出有颜色的控制台日志。这里只是一个最简单不过的配置, Serilog 框架的配置是非常灵活的,您想了解更详细的配置方法,可参阅[官方文档](https://github.com/serilog/serilog/wiki/Getting-Started)进行学习。

关于 Serilog 框架非常不错的博客整理:

[结构化日志类库-Serilog](https://www.cnblogs.com/mq0036/p/8479956.html "使用 Serilog 框架记录日志")