如何让Serilog实例立即记录到Seq而不需要调用它的Dispose()?

Sam*_*evx 5 seq serilog seq-logging

我有一个 Windows 服务,它处理长时间运行的任务,并且永远不会关闭,除非强制关闭(即计算机关闭)。我希望在 Windows 服务启动和运行的整个过程中保持同一个 Serilog 实例处于活动状态(出于性能原因)。

但是,我只在 Dispose() 调用之后看到日志,如下所示。

var logger = new LoggerConfiguration()
            .WriteTo.Seq("http://localhost:5341")
            .CreateLogger();

logger.ForContext("TestContext", new { Machine = "TSTDB2" }, true).Information("Test");

logger.Dispose();
Run Code Online (Sandbox Code Playgroud)

我不介意几秒钟的延迟,但必须等到 Serilog 实例被处理对我来说不起作用。任何解决方案将不胜感激。

Cai*_*ete 1

默认情况下,Seq Sink 会等待 2 秒,然后检查是否有消息要发送到服务器,因此如果您希望消息尽快发送,则需要将period设为。TimeSpan.Zero

var logger = new LoggerConfiguration()
            .WriteTo.Seq("http://localhost:5341", period: TimeSpan.Zero) // <---
            .CreateLogger();
Run Code Online (Sandbox Code Playgroud)