当前位置: 首页 > news >正文

C# Serilog 日志

  • Serilog 的基本概念
    • 日志级别
    • 日志输出目标(`Sink`)
  • 安装 `Serilog`
  • 配置 `Serilog`
    • 程序代码中配置
    • 通过配置文件配置
  • 常见配置选项
    • 日志级别
    • 文件日志
    • 控制台日志
    • 数据库日志
  • 使用 `Serilog` 在 `ASP.NET Core` 中
    • 安装 `NuGet` 包
    • 配置 `Serilog`
  • 日志上下文
  • 总结

Serilog 是一个流行的 .NET 日志库,用于记录应用程序的运行日志。它提供了灵活的配置方式和丰富的日志输出选项,支持将日志输出到控制台、文件、数据库、云存储等多种目标。以下是关于 SerilogC# 中的使用方法和一些常见配置的介绍。

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();// 配置 SerilogLog.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),并存储日志信息。

使用 SerilogASP.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,可以方便地记录应用程序的运行日志,帮助开发人员进行调试和问题排查。

相关文章:

  • 全国空气质量监测站点数据分析:从原始数据到空间可视化
  • (八)深度循环神经网络:长序列建模、注意力机制与多模态融合
  • NY167NY171美光固态闪存NY176NY180
  • 交叉编译笔记
  • 开源高频电磁场与电磁波数值仿真软件
  • chrome插件中如何使用midscene.js
  • Cursor 工具项目构建指南:让 AI 审查 AI 生产的内容,确保生产的内容质量和提前发现问题
  • 64页|PPT|基于华为IPD与质量管理体系融合的研发质量管理:L1-L6分层架构驱动高效运营、标准化质量管理体系
  • 在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
  • 人工操舵是如何操作的?介绍人工操舵的经验和规律
  • Unity实现不倒翁
  • Spring AI MCP
  • UVa12298 3KP-BASH Project
  • AR珠宝佩戴与传统的珠宝购物有哪些区别?​
  • Keepalived 与 Nginx 高可用部署方案详解
  • “详规一张图”——上海土地利用数据
  • Dify-6: 部署
  • PostgreSQL 的扩展pg_walinspect
  • copilot基于 DeepSeek-R1 思路构建 VLA 自动驾驶强化学习系统
  • C# vs2022 找不到指定的 SDK“Microsof.NET.Sdk
  • 联锁酒店网站建设需求分析/清远网站seo
  • 高端终端网站设计类网站/网站关键词排名查询
  • 福州网站开发招聘/企业网站优化
  • 广州建设工程交易中心主任/优化推广方案
  • 小米开发者模式怎么关闭/长春seo外包
  • 唐山营销型网站建设/广州网站seo