日志与监控
ILogger 日志、Serilog 集成、结构化日志、请求追踪
日志与监控
ASP.NET Core 内置了 ILogger<T> 接口,配合 Serilog 等库实现结构化日志——可搜索、可分析。
学完本章你将: 掌握 ILogger 日志、Serilog 集成、结构化日志。
ILogger 基础
csharp
public class UserService
{
private readonly ILogger<UserService> _logger;
public UserService(ILogger<UserService> logger) => _logger = logger;
public async Task<User?> GetUserAsync(int id)
{
_logger.LogInformation("查询用户 {UserId}", id);
try
{
var user = await _repo.FindAsync(id);
_logger.LogDebug("查询结果: {@User}", user);
return user;
}
catch (Exception ex)
{
_logger.LogError(ex, "查询用户 {UserId} 失败", id);
throw;
}
}
}
Serilog 集成
csharp
// NuGet: Serilog.AspNetCore
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.File("logs/app.log", rollingInterval: RollingInterval.Day)
.CreateLogger();
builder.Host.UseSerilog();
结构化日志的价值
csharp
// ❌ 字符串拼接——无法搜索
_logger.LogInformation($"用户 {name} 在 {time} 登录");
// ✅ 结构化日志——按属性搜索
_logger.LogInformation("用户登录 {UserName} {LoginTime}", name, time);
// 在 Seq/Elasticsearch 中可搜: UserName = "小明"