C# 使用Serilog记录到Splunk时丢弃的日志消息

C# 使用Serilog记录到Splunk时丢弃的日志消息,c#,.net,core,splunk,serilog,C#,.net,Core,Splunk,Serilog,我们有一个Windows服务,它创建一个新线程并每天运行一次计划任务。日志记录是用Serilog完成的,sink是Splunk(“Serilog.Sinks.Splunk”)。在成功运行期间,我们将八条信息消息写入日志(log.information(“”)。除了时间戳和整数值之外,消息在不同的运行中或多或少是相同的。其中四条消息在实际作业任务完成之前记录,四条消息在实际作业任务完成之后记录 我们发现,有时所有八条消息都出现在Splunk中,有时只出现最后四条消息(在耗时的处理完成后记录的消息)

我们有一个Windows服务,它创建一个新线程并每天运行一次计划任务。日志记录是用Serilog完成的,sink是Splunk(“Serilog.Sinks.Splunk”)。在成功运行期间,我们将八条信息消息写入日志(log.information(“”)。除了时间戳和整数值之外,消息在不同的运行中或多或少是相同的。其中四条消息在实际作业任务完成之前记录,四条消息在实际作业任务完成之后记录

我们发现,有时所有八条消息都出现在Splunk中,有时只出现最后四条消息(在耗时的处理完成后记录的消息),有时没有任何消息

当我们添加另一个接收器,写入文件(“Serilog.Sinks.file”)时,我们总是得到文件中所有的八条消息

添加Serilog调试日志记录(Serilog.Debugging.SelfLog.Enable),当日志消息被丢弃时,我们会记录以下调试消息(一次-不是每个丢失的消息都记录一条): “2019-08-30T11:28:03.9029821Z尝试发送到时收到禁止状态代码https:///services/collector. 事件已被丢弃,将不会放回队列中。“

在计划任务中添加睡眠(System.Threading.Thread.Sleep())的第一件事是我们总是在Splunk中的睡眠之后完成日志记录,因此似乎需要一些时间来建立到Splunk端点的连接,并且在连接建立之前发送的任何消息都会被丢弃。由于其中三条消息是在执行进入代码之前由外部nuget包(Hangfire)记录的,因此我们经常会丢失这三条消息,因此在代码中使用Sleep()并不理想

如我所述,伪代码(包括睡眠)日志消息1-3(和6-8)由外部nuget包编写:

    public Task DoJob()
    {
        var currentRunInformation = new RunInformation();
        try
        {
            System.Threading.Thread.Sleep(3000);
            Log.Information($"Log message 4");

            //Get Data
            var jobData = GetJobData();
            //Do some calculations
            var calculated = DoCalculations(jobData);

            //Save result
            PersistResult(calculated);

            Log.Information($"Log message 4");
            return Task.CompletedTask;
        }
        catch (Exception exception)
        {
            Log.Error(exception, $"Error log");
            return Task.FromException(exception);
        }
    }

有没有办法让日志记录在发送消息之前等待打开的连接?或任何其他选项,以避免以不可预知的方式丢弃日志记录?

中没有任何现成的选项可在发送消息之前对Splunk执行额外检查,或重试失败的消息。如果将来实现此功能,您可以跟踪以获得通知

,接收器只是向Splunk事件收集器发送HTTP POST请求

要获得您想要的行为,您必须实现的变体。您可能可以借用的实现,并将发送失败的消息存储在文件中,稍后重试


ps:有趣的是,即使是演示如何使用水槽的,也有一个
线程。在发送消息之前先睡一觉,给Splunk一个热身的机会。。。