C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C# Serilog 日志

C# Serilog 日志的使用小结

作者:卷纸要用清风的

Serilog是一个功能强大且灵活的日志库,它支持多种日志输出目标和丰富的配置选项,可以满足不同的日志需求,通过合理配置Serilog,可以方便地记录应用程序的运行日志,感兴趣的可以了解一下

Serilog 的基本概念

日志级别

Serilog 支持多种日志级别,从低到高依次是:

日志输出目标(Sink)

Serilog 支持多种日志输出目标,例如:

安装Serilog

C# 项目中使用 Serilog,首先需要安装相关的 NuGet 包。以下是一些常用的 Serilog 包:

配置Serilog

程序代码中配置

在代码中直接配置 Serilog 是最直接的方式。以下是一个简单的示例:

using Serilog;
using Serilog.Sinks.File;

class Program
{
    static void Main(string[] args)
    {
        // 配置日志
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug() // 设置最低日志级别
            .WriteTo.Console()    // 输出到控制台
            .WriteTo.File("logs/log.txt", rollingInterval: RollingInterval.Day) // 输出到文件,按天滚动
            .CreateLogger();

        // 写入日志
        Log.Information("This is an information message.");
        Log.Warning("This is a warning message.");
        Log.Error("This is an error message.");

        // 关闭日志
        Log.CloseAndFlush();
    }
}

通过配置文件配置

Serilog 也支持通过配置文件(如 appsettings.json)进行配置,这种方式更加灵活。首先需要安装 Serilog.Settings.Configuration 包:
然后在 appsettings.json 文件中配置 Serilog

{
  "Serilog": {
    "MinimumLevel": "Debug",
    "WriteTo": [
      {
        "Name": "Console"
      },
      {
        "Name": "File",
        "Args": {
          "path": "logs/log.txt",
          "rollingInterval": "Day"
        }
      }
    ]
  }
}

在程序中加载配置文件并初始化 Serilog

using Microsoft.Extensions.Configuration;
using Serilog;

class Program
{
    static void Main(string[] args)
    {
        // 加载配置文件
        var configuration = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json")
            .Build();

        // 配置 Serilog
        Log.Logger = new LoggerConfiguration()
            .ReadFrom.Configuration(configuration)
            .CreateLogger();

        // 写入日志
        Log.Information("This is an information message.");
        Log.Warning("This is a warning message.");
        Log.Error("This is an error message.");

        // 关闭日志
        Log.CloseAndFlush();
    }
}

常见配置选项

日志级别

可以通过 MinimumLevel 设置最低日志级别,低于该级别的日志将不会被记录。例如:

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Warning() // 只记录 Warning 及以上级别的日志
    .CreateLogger();

文件日志

文件日志是常用的日志输出方式。Serilog 提供了丰富的文件日志配置选项,例如:

Log.Logger = new LoggerConfiguration()
    .WriteTo.File("logs/log.txt", rollingInterval: RollingInterval.Day, retainedFileCountLimit: 7)
    .CreateLogger();

控制台日志

控制台日志可以实时显示日志信息,方便调试。可以通过以下方式配置控制台日志:

Log.Logger = new LoggerConfiguration()
    .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level}] {Message}{NewLine}{Exception}")
    .CreateLogger();

其中,outputTemplate 可以自定义日志的输出格式。

数据库日志

Serilog 支持将日志输出到多种数据库,例如 SQL ServerMySQL 等。以下是将日志输出到 SQL Server 数据库的示例:

Log.Logger = new LoggerConfiguration()
    .WriteTo.MSSqlServer(
        connectionString: "Server=your_server;Database=your_database;User Id=your_user;Password=your_password;",
        tableName: "Logs",
        autoCreateSqlTable: true)
    .CreateLogger();

在数据库中,Serilog 会自动创建一个日志表(如 Logs),并存储日志信息。

使用Serilog在ASP.NET Core中

Serilog 也可以与 ASP.NET Core 集成,为 Web 应用程序提供日志功能。以下是一个集成的示例:

安装NuGet包

安装以下 NuGet 包:

配置Serilog

Program.cs 文件中配置 Serilog

using Serilog;

var builder = WebApplication.CreateBuilder(args);

// 配置 Serilog
Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .WriteTo.Console()
    .WriteTo.File("logs/log.txt", rollingInterval: RollingInterval.Day)
    .CreateLogger();

builder.Host.UseSerilog();

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

ASP.NET Core 中,Serilog 会自动记录应用程序的生命周期事件(如启动、停止)以及中间件的日志。

日志上下文

Serilog 支持日志上下文,可以在日志中添加上下文信息,例如用户 ID、请求 ID 等。以下是一个示例:

using Serilog;
using Serilog.Context;

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

using (LogContext.PushProperty("UserId", 12345))
{
    Log.Information("User {UserId} performed an action.", 12345);
}

在日志中,UserId 将作为上下文信息被记录。

总结

Serilog 是一个功能强大且灵活的日志库,适用于各种 .NET 应用程序。它支持多种日志输出目标和丰富的配置选项,可以满足不同的日志需求。通过合理配置 Serilog,可以方便地记录应用程序的运行日志,帮助开发人员进行调试和问题排查。

到此这篇关于C# Serilog 日志的使用小结的文章就介绍到这了,更多相关C# Serilog 日志内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文