Serilog 文件日志配置
功能概述
EasyAdminBlazor 自带数据库日志(后台“错误日志”页面查看)。生产环境排查问题时常需要文件日志:把日志写到服务器磁盘上,按天/按大小轮转,方便直接查看和归档。推荐用 Serilog 实现,几行配置即可,且可与框架自带的数据库日志并存。
安装
在项目里添加 NuGet 包(版本请选择与当前 .NET 版本匹配的最新稳定版):
dotnet add package Serilog.AspNetCore
dotnet add package Serilog.Sinks.File
快速开始
在 Program.cs 的 builder 构建之前加入:
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseSerilog((ctx, cfg) => cfg
.MinimumLevel.Information()
.WriteTo.File("logs/log-.log",
rollingInterval: RollingInterval.Day, // 按天轮转
retainedFileCountLimit: 30, // 最多保留 30 个文件
fileSizeLimitBytes: 20 * 1024 * 1024, // 单文件最大 20MB
rollOnFileSizeLimit: true, // 超过大小自动切新文件
outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level:u3}] {SourceContext} {Message:lj}{NewLine}{Exception}")
, writeToProviders: true); // ⚠️ 关键:保留框架自带日志提供程序
builder.AddEasyAdminBlazor(...);
⚠️
writeToProviders: true必须加:UseSerilog默认会替换 ASP.NET Core 的日志提供程序,导致框架自带的数据库日志收不到数据(后台“错误日志”页面停更)。加上这个参数后,Serilog 文件日志与数据库日志并存。
从配置文件读取(推荐)
生产环境建议把日志级别、路径等放配置文件。先安装 Serilog.Settings.Configuration:
dotnet add package Serilog.Settings.Configuration
Program.cs:
builder.Host.UseSerilog((ctx, cfg) => cfg.ReadFrom.Configuration(ctx.Configuration), writeToProviders: true);
appsettings.json:
{
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "logs/log-.log",
"rollingInterval": "Day",
"retainedFileCountLimit": 30,
"fileSizeLimitBytes": 20971520,
"rollOnFileSizeLimit": true,
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level:u3}] {SourceContext} {Message:lj}{NewLine}{Exception}"
}
}
]
}
}
常用配置项
| 配置项 | 说明 | 示例 |
|---|---|---|
rollingInterval |
轮转周期 | Day / Hour / Minute / Infinite |
retainedFileCountLimit |
最多保留的日志文件数,超出的自动删除 | 30 |
fileSizeLimitBytes |
单文件大小上限 | 20971520(20MB) |
rollOnFileSizeLimit |
达到大小上限是否切新文件 | true |
shared |
多进程共享写同一文件(多实例部署用) | true |
outputTemplate |
每行输出格式 | 见上文 |
MinimumLevel |
最低日志级别 | Warning(生产建议) |
MinimumLevel.Override |
按命名空间覆盖级别 | "Microsoft": "Warning" |
与框架数据库日志并存
两套日志各司其职:
- 数据库日志(框架自带):后台“错误日志”页面查看,方便在管理界面排查
- 文件日志(Serilog):落盘到服务器,适合直接查看、归档、取证
并存的关键就是 writeToProviders: true。如果你希望只写文件、不要数据库日志,把该参数去掉(或设为 false),注意此时后台“错误日志”页面将不再有数据。
注意:框架的数据库日志只记录 Error 及以上级别(后台“错误日志”页面用于排查错误),所以正常运行的 Information 日志不会出现在该页面;如需查看全量日志请用文件日志。
多实例部署注意事项
- 默认情况下不要用
shared: true,多个进程写同一文件会互相覆盖;每个实例写自己的目录即可 - 如果多个实例必须共享同一日志目录,给 File sink 加
shared: true,并注意文件锁与性能 - 磁盘空间:根据日志量和保留策略(
retainedFileCountLimit)控制,避免日志把磁盘写满
性能建议
- 高吞吐场景可加
Serilog.Sinks.Async异步写盘,避免日志拖慢请求 - 生产环境级别建议
Warning起,避免大量Information刷盘
常见问题
- 日志文件没生成:检查目录是否存在且有写权限;检查
MinimumLevel是否把目标级别过滤掉了 - 后台“错误日志”页面没数据了:
UseSerilog替换了默认日志提供程序,检查是否加了writeToProviders: true - 中文乱码:Serilog 默认 UTF-8 输出,正常不会乱码;如使用其它编码可指定
encoding