我正在将 .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();
}
有什么主意吗?谢谢