Serilog写入日志两次

10

我正在使用配置如下的 Serilog 和 Elasticsearch sink:

Log.Logger = new LoggerConfiguration()
                    .MinimumLevel.Verbose()
                    .MinimumLevel.Override("Microsoft", LogEventLevel.Verbose)
                    .Enrich.FromLogContext()
                    .Enrich.WithExceptionDetails()
                    .Enrich.WithProperty("Application", "abc")
                    .Enrich.WithProperty("Environment", env.EnvironmentName)
                    .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(Configuration["LoggingEndpoint"]))
                    {
                        AutoRegisterTemplate = true,
                        CustomFormatter = new ExceptionAsObjectJsonFormatter(renderMessage: true) // Better formatting for exceptions
                    })

// 之后:

services.AddLogging(loggingBuilder =>
            loggingBuilder.AddSerilog());

但是我可以在Kibana上看到每个日志都出现了两次,时间戳之间只相差几毫秒。我尝试了这里提供的解决方案,以防万一它们可能有帮助,但没有成功。


你是如何解决这个问题的? - J.Kirk.
9
可能有点晚了,但是你是否也在 appsettings.json 中配置了 Serilog 日志记录?如果是这样,它将会记录来自代码和日志记录的信息。我之前遇到了一些问题! - Jordy van Eijk
1
乔迪的回答应该是答案。 - TheNameHobbs
@JordyvanEijk 你找到解决方案了吗?我使用SerilogRequestLogging,如果我的控制器中有异常,它会被记录两次。 - jmazur
@jmazur 你还有这个问题吗?也许你可以在控制器内记录异常并重新抛出它,这样应用程序本身就能捕获到它了。 - Jordy van Eijk
1个回答

13
这可能是因为您在appsettings.json文件和代码中都配置了Serilog,导致记录重复。

谢谢!这正是我代码中的情况。我使用了WriteTo(new JsonFormatter()),然后紧接着使用了ReadFrom.Configuration。我删除了后者,现在日志记录正常了。 - virouz98

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接