Serilog.Sinks.Graylog在Web API正常,控制台应用无法日志到Graylog
ASP.NET Core应用可正常向Graylog发送日志,但控制台应用高版本Serilog.Sinks.Graylog失效
我在Windows系统的Docker Desktop中运行Graylog实例,已启用UDP和HTTP输入。ASP.NET Core应用能正常将日志发送至Graylog,但控制台应用无法实现该功能。
ASP.NET Core应用配置
Program.cs核心配置
builder.Host.UseSerilog((context, configuration) => { configuration .ReadFrom.Configuration(context.Configuration) .WriteTo.Graylog(new GraylogSinkOptions() { HostnameOrAddress = "localhost", Port = 12201, TransportType = TransportType.Http }); });
后续请求日志配置
app.UseSerilogRequestLogging();
依赖包清单
<PackageReference Include="Serilog.AspNetCore" Version="8.0.1" /> <PackageReference Include="Serilog.Sinks.Graylog" Version="3.1.1" />
启动ASP.NET应用后,日志可正常出现在Graylog实例中。
控制台应用配置
日志初始化代码
Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .WriteTo.Console() .WriteTo.File("log.txt", rollingInterval: RollingInterval.Day, rollOnFileSizeLimit: true) .WriteTo.Graylog(new GraylogSinkOptions() { HostnameOrAddress = "localhost", Port = 12201, TransportType = TransportType.Http, Facility = "Test App" }) .CreateLogger();
依赖包清单
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="Serilog" Version="4.0.0" /> <PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" /> <PackageReference Include="Serilog.Sinks.File" Version="6.0.0" /> <PackageReference Include="Serilog.Sinks.Graylog" Version="3.1.1" />
控制台应用可正常输出日志到控制台和本地文件,但无日志发送至Graylog。通过Fiddler Classic可捕获到Web应用的流量、控制台应用调用Graylog API的流量,却看不到日志相关的传输流量。
调试与版本兼容性问题
添加Serilog自调试代码后,未触发任何异常或错误提示:
Serilog.Debugging.SelfLog.Enable(msg => Console.WriteLine(msg));
控制台应用使用Serilog.Sinks.Graylog 3.0.2版本时可正常向Graylog发送日志,但3.0.2以上版本均失效;而这些高版本在ASP.NET Core应用中却能正常工作,疑似存在兼容性问题。
控制台应用Main方法完整代码
static async Task Main(string[] args) { Serilog.Debugging.SelfLog.Enable(msg => Console.WriteLine(msg)); Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .Enrich.FromLogContext() .WriteTo.Graylog(new GraylogSinkOptions() { HostnameOrAddress = "localhost", Port = 12201, TransportType = TransportType.Http, Facility = "Test App", }) .CreateLogger(); Log.Information("This is a test message"); Log.CloseAndFlush(); }
内容的提问来源于stack exchange,提问作者Scott K
相关产品推荐
相关产品推荐

