Serilog是.NET 6中常用的日志框架之一,用于记录和管理应用程序的日志信息。它具有灵活的配置选项和丰富的扩展功能,使开发人员能够轻松地集成日志记录功能到他们的应用程序中。Serilog是一个用于.NET应用程序的诊断日志库。它易于设置,具有清晰的API,并且可以在所有最新的.NET平台上运行。尽管它即使在最简单的应用程序中也很有用,但Serilog对结构化日志记录的支持在监视复杂的、分布式的和异步的应用程序和系统时尤其出色。 本文主要介绍NET 6 (C#)中 Serilog 日志框架的使用,以及相关的示例代码。

1、安装引用

使用 Serilog 日志框架,需要安装引用 Serilog,安装的方法有多种,分别如下,

1)使用Nuget界面管理器

搜索 "Serilog" 在列表中分别找到它,点击"安装"

相关文档VS(Visual Studio)中Nuget的使用

2)使用Package Manager命令安装

PM> Install-Package Serilog

3)使用.NET CLI命令安装

> dotnet add package Serilog

控制台应用需要安装引用 Serilog.Sinks.Console,ASP.NET Core项目需要安装引用 Serilog.AspNetCore,安装可以参考上面的方法。

2、Console 控制台项目配置使用Serilog

一种Serilog接收器,通过标准输出将日志事件写入Windows控制台或ANSI终端。支持着色和自定义主题,包括macOS、Linux和Windows 10上的ANSI 256颜色主题。默认的输出是纯文本。

using Serilog;
using Serilog.Sinks.SystemConsole.Themes;
using System;
using System.Threading;

namespace ConsoleDemo
{
    public static class Program
    {
        public static void Main()
        {
            Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Verbose()
                .WriteTo.Console(theme: AnsiConsoleTheme.Code)
                .CreateLogger();

            try
            {
                Log.Debug("Getting started");

                Log.Information("Hello {Name} from thread {ThreadId}", Environment.GetEnvironmentVariable("USERNAME"), Thread.CurrentThread.ManagedThreadId);

                Log.Warning("No coins remain at position {@Position}", new { Lat = 25, Long = 134 });

                Fail();
            }
            catch (Exception e)
            {
                Log.Error(e, "Something went wrong");
            }

            Log.CloseAndFlush();
        }

        static void Fail()
        {
            throw new DivideByZeroException();
        }
    }
}

3、ASP.NET Core 控制台项目配置使用Serilog

Serilog日志记录适用于ASP.NET Core。此包通过Serilog路由ASP.NET Core的日志消息,可以将有关ASP.NET内部操作的信息写入与应用程序事件相同的Serilog接收器中。安装并配置了Serilog.AspNetCore后,可以直接通过Serilog或ASP.NET注入的任何ILogger接口编写日志消息。所有日志记录器将使用相同的底层实现、级别和目的地。

using Serilog;

namespace Sample;

public static class Program
{
    public static int Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
            .WriteTo.Console()
            .CreateBootstrapLogger();

        Log.Information("Starting up!");

        try
        {
            CreateHostBuilder(args).Build().Run();

            Log.Information("Stopped cleanly");
            return 0;
        }
        catch (Exception ex)
        {
            Log.Fatal(ex, "An unhandled exception occured during bootstrapping");
            return 1;
        }
        finally
        {
            Log.CloseAndFlush();
        }
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .UseSerilog((context, services, configuration) => configuration
                .ReadFrom.Configuration(context.Configuration)
                .ReadFrom.Services(services)
                .Enrich.FromLogContext()
                .WriteTo.Console())
            .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
}

推荐文档