C# Serilog 日志的使用小结
作者:卷纸要用清风的
Serilog 的基本概念
日志级别
Serilog 支持多种日志级别,从低到高依次是:
Verbose(详细):记录最详细的信息,通常用于调试。Debug(调试):记录调试信息,比Verbose稍低。Information(信息):记录正常运行时的信息。Warning(警告):记录可能影响正常运行的警告信息。Error(错误):记录运行时的错误。Fatal(致命):记录导致应用程序崩溃的致命错误。
日志输出目标(Sink)
Serilog 支持多种日志输出目标,例如:
- 控制台(
Console) - 文件(
File) - 数据库(如
SQL Server、MySQL) - 云存储(如
Azure Blob Storage、AWS S3) - 日志聚合工具(如
Elasticsearch、Seq)
安装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 Server、MySQL 等。以下是将日志输出到 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.AspNetCoreSerilog.Sinks.ConsoleSerilog.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 日志内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
