ASP.NET Core 7下Serilog无法向Graylog记录异常问题求助
问题诊断与解决方案
核心原因分析
你的问题核心在于Serilog.Sinks.Graylog对Exception对象的处理逻辑,结合测试现象(转字符串可正常记录),主要有以下几个可能:
- Graylog Sink默认未启用Exception字段的序列化
- UDP传输的MTU限制导致包含堆栈的异常日志数据包被丢弃
- ASP.NET Core日志适配层的重复配置导致Exception信息丢失
分步解决方案
1. 检查并更新Serilog.Sinks.Graylog版本
旧版本的Graylog Sink存在Exception序列化bug,先确保使用最新稳定版(推荐v3.x以上),在NuGet包管理器中更新Serilog.Sinks.Graylog。
2. 显式配置Graylog Sink的Exception序列化
修改BuildLoggerConfiguration中的Graylog配置,添加PropertyFormatter并明确启用Exception包含:
private static Serilog.Core.Logger BuildLoggerConfiguration(IConfiguration configuration) { return new LoggerConfiguration() .ReadFrom.Configuration(configuration) .Enrich.FromLogContext() .MinimumLevel.Is(LogEventLevel.Information) .MinimumLevel.Override("System", LogEventLevel.Warning) .MinimumLevel.Override("Microsoft", LogEventLevel.Error) .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .WriteTo.Console() .WriteTo.Graylog(new GraylogSinkOptions { HostnameOrAddress = "nice_server_ip", Port = 12201, TransportType = TransportType.Udp, MinimumLogEventLevel = LogEventLevel.Verbose, Facility = "my.facility", MessageGeneratorType = MessageIdGeneratorType.Timestamp, // 显式配置属性格式化器,确保Exception被序列化 PropertyFormatter = new GraylogPropertyFormatter( includeMessageTemplate: true, includeProperties: true, includeException: true ) }) .CreateLogger(); }
3. 移除重复的日志配置
Program.cs中同时调用了builder.Host.AddUsageSerilog(configuration)和builder.Logging.AddSerilog(),这会导致ASP.NET Core日志系统重复适配,可能丢失Exception上下文。移除builder.Logging.AddSerilog();这一行即可。
4. 解决UDP传输大小限制问题
如果异常包含较长堆栈信息,UDP数据包可能超过默认MTU(通常1500字节)导致被丢弃,可尝试:
- 改用TCP传输:将
TransportType = TransportType.Tcp - 调整Graylog服务器的UDP接收缓冲区配置
- 启用日志压缩(部分Graylog Sink版本支持)
5. 直接用Serilog日志对象测试
在全局过滤器中暂时改用Serilog静态日志对象测试,排除ASP.NET Core ILogger适配问题:
// 替换原ILogger调用 Serilog.Log.Error(context.Exception, "Api action failure.");
如果这样能正常记录到Graylog,说明问题出在ASP.NET Core日志适配层,需确保AddUsageSerilog的配置完全覆盖默认日志提供程序。
验证步骤
- 重启应用后触发异常
- 查看Graylog的Raw Message,确认是否包含
exception字段 - 若仍未收到,检查Graylog服务器的UDP/TCP端口是否正常监听,以及防火墙规则是否允许流量通过
内容的提问来源于stack exchange,提问作者speed258
相关产品推荐
相关产品推荐

