C# Serilog 日志的使用小结

 更新时间:2025年08月13日 11:31:33   作者:卷纸要用清风的  
Serilog是一个功能强大且灵活的日志库,它支持多种日志输出目标和丰富的配置选项,可以满足不同的日志需求,通过合理配置Serilog,可以方便地记录应用程序的运行日志,感兴趣的可以了解一下

Serilog 的基本概念

日志级别

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

  • Verbose(详细):记录最详细的信息,通常用于调试。
  • Debug(调试):记录调试信息,比 Verbose 稍低。
  • Information(信息):记录正常运行时的信息。
  • Warning(警告):记录可能影响正常运行的警告信息。
  • Error(错误):记录运行时的错误。
  • Fatal(致命):记录导致应用程序崩溃的致命错误。

日志输出目标(Sink)

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

  • 控制台(Console
  • 文件(File
  • 数据库(如 SQL ServerMySQL
  • 云存储(如 Azure Blob StorageAWS S3
  • 日志聚合工具(如 ElasticsearchSeq

安装Serilog

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

  • Serilog:核心日志库。
  • Serilog.Sinks.Console:将日志输出到控制台。
  • Serilog.Sinks.File:将日志输出到文件。
  • Serilog.Sinks.MSSqlServer:将日志输出到 SQL Server 数据库。
  • Serilog.Settings.Configuration:通过配置文件(如 appsettings.json)配置 Serilog
    可以通过 NuGet 包管理器安装这些包。

配置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.AspNetCore
  • Serilog.Sinks.Console
  • Serilog.Sinks.File

配置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 日志内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#序列化与反序列化集合对象并进行版本控制

    C#序列化与反序列化集合对象并进行版本控制

    这篇文章介绍了C#序列化与反序列化集合对象并实现版本控制的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • C#操作SQLite数据库方法小结(创建,连接,插入,查询,删除等)

    C#操作SQLite数据库方法小结(创建,连接,插入,查询,删除等)

    这篇文章主要介绍了C#操作SQLite数据库方法,包括针对SQLite数据库的创建,连接,插入,查询,删除等操作,并提供了一个SQLite的封装类,需要的朋友可以参考下
    2016-07-07
  • 手动编译C#代码的方法

    手动编译C#代码的方法

    在本文里小编给大家分享的是关于手动编译C#代码的方法和步骤,对此有需要的朋友们可以学习下。
    2018-12-12
  • C# 编码好习惯,献给所有热爱c#的同志

    C# 编码好习惯,献给所有热爱c#的同志

    c#编写者,需要培养的一些好习惯
    2009-02-02
  • 一篇文章教会你用Unity制作网格地图生成组件

    一篇文章教会你用Unity制作网格地图生成组件

    网格地图这个功能在策略型游戏中应用比较广泛,基本情况下会将地图分割成正方形网格或者六边形网格,这篇文章主要给大家介绍了如何通过一篇文章学会用Unity制作网格地图生成组件的相关资料,需要的朋友可以参考下
    2021-08-08
  • C#原型模式之如何通过克隆对象来优化创建过程

    C#原型模式之如何通过克隆对象来优化创建过程

    原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初始化的场景,本文介绍C#原型模式之如何通过克隆对象来优化创建过程,感兴趣的朋友一起看看吧
    2025-03-03
  • c#线程同步使用详解示例

    c#线程同步使用详解示例

    这篇文章主要介绍了c#线程同步使用方法,介绍几种常用的C#进行线程同步的方式,需要的朋友可以参考下
    2014-02-02
  • c# Newtonsoft.Json 常用方法总结

    c# Newtonsoft.Json 常用方法总结

    这篇文章主要介绍了c# Newtonsoft.Json 常用方法的相关资料,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-02-02
  • WPF自定义路由事件的实例教程

    WPF自定义路由事件的实例教程

    WPF中有两种事件模型,一种是在WinForm时代就存在的CLR事件,另一种是WPF时代的路由事件,这篇文章主要给大家介绍了关于WPF自定义路由事件的相关资料,需要的朋友可以参考下
    2021-09-09
  • C#中泛型举例List<T>与DataTable相互转换

    C#中泛型举例List<T>与DataTable相互转换

    这篇文章介绍了C#中泛型举例List<T>与DataTable相互转换的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05

最新评论