将Serilog.Sink.Elasticsearch 8与缓冲区一起使用时重复的日志

时间:2019-09-10 09:15:59

标签: .net elasticsearch logging kibana serilog

我正在将 .NET 4.6.2 应用程序与 Serilog Elasticsearch sink 8 一起使用,以将日志发送到我们的Elasticsearch集群。我们还添加了缓冲区设置,以避免丢失任何数据。

在我们升级到最新版本以使其与Elasticsearch 7(群集)兼容之前,Elasticsearch Sink 7.x的一切工作都很好。

在较新的版本中,日志会重复(重复或更多),有时甚至不会保存在Elasticsearch中。

我相信我的缓冲区设置一定有问题。

这是我的测试代码:

private static ILogger GetLogger()
{
    string indexName = "buffertest";

    var loggerConfig = new LoggerConfiguration()
        .MinimumLevel.Debug()
        .WriteTo.Console();

    var esSink = new ElasticsearchSinkOptions(new Uri("https://myelasticdomain.com:9200"))
    {
        AutoRegisterTemplate = true,
        AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv7,
        TemplateName = indexName,
        IndexFormat = indexName + "-{0:yyyy.MM.dd}",
        ModifyConnectionSettings = c => c.BasicAuthentication("myuser", "****"),
        CustomFormatter = new ExceptionAsObjectJsonFormatter(renderMessage: true)
    };

    // buffer
    esSink.BufferBaseFilename = $@"C:\logs\ElasticSeriLog\buffer-{indexName}";
    esSink.SingleEventSizePostingLimit = null;
    esSink.BufferFileSizeLimitBytes = 1000 * 1000 * 100; // 100 MB
    esSink.BufferFileCountLimit = 50;

    loggerConfig.WriteTo.Elasticsearch(esSink);

    return loggerConfig.CreateLogger();
}

static void Main(string[] args)
{
    Log.Logger = GetLogger();

    for (int i = 0; i < 500; i++)
    {
        var lineNumer = i + 1;
        var msgToLog = GetTextToLog();
        Log.Information("{Line}{Message}", lineNumer, msgToLog);
    }

    Console.WriteLine("Press any key to continue...");
    Console.ReadKey();

    Console.WriteLine("Flushing...");
    Log.CloseAndFlush();
}

有什么主意吗?谢谢

0 个答案:

没有答案