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

http://www.xdnf.cn/news/969913.html

相关文章:

  • 西电计组第四章-存储系统
  • 72道Nginx高频题整理(附答案背诵版)
  • 【Qt】显示类控件 QLabel、QLCDNumer、QProgressBar、QCalendarWidget
  • ROS-编写工作区、功能包、节点
  • 通过Elastic EDR看smbexec并进行二次开发Bypass
  • @component、@bean、@Configuration的区别
  • 在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
  • MySQL:InnoDB架构(内存架构篇)
  • Grey任命李文杰为中国总裁,开启增长新章
  • 云服务运行安全创新标杆:阿里云飞天洛神云网络子系统“齐天”再次斩获奖项
  • 12要素法:构建高效云原生应用
  • 鸿蒙Next仓颉语言开发实战教程:下拉刷新和上拉加载更多
  • leetcode:42. 接雨水(秒变简单题)
  • 代码训练LeetCode(27)接雨水
  • 【PX4飞控】右手坐标系与右手系旋转正方向的定义与判断方法
  • go全局配置redis,全局只需要连接一次,然后全局可以引用使用
  • UVa12298 3KP-BASH Project
  • Codeforces Round 1027 (Div. 3)-G
  • Oracle 数据库对象管理:表空间与表的操作
  • 解决克隆Github源码库时的Permission denied 问题
  • 入门学者做的excel文献笔记发现不了问题怎么办?——用提示词来解决
  • 日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
  • RocketMQ延迟消息机制
  • Python列表:高效灵活的数据存储与操作指南
  • Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
  • 如何备考公路水运安全员A证?
  • pytorch-frame开源程序适用于 PyTorch 的表格深度学习库,一个模块化深度学习框架,用于在异构表格数据上构建神经网络模型。
  • dMSA 滥用(BadSuccessor)导致权限提升
  • C++11 花括号等式初始化器(Brace-or-Equal Initializers):从入门到精通
  • 安全大模型智驱网络和数据安全效能跃迁