如何在 .NET Core 3.1 的应用程序设置中配置 Serilog Elasticsearch 错误处理?
How to configure Serilog Elasticsearch error hanling in appsettings in .NET Core 3.1?
我正在尝试在 .NET Core 3.1 (C#) 项目中配置 Serilog,但我想在 appsettings.json
中完全做到这一点。对于 file sinks 我做了所有配置 w/o 任何问题,但是对于 elasticsearch 我不知道如何将下面的行写入appsettings.json
这样它就可以工作了:
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200"))
{
FailureCallback = e => Console.WriteLine("Unable to submit event " + e.MessageTemplate),
EmitEventFailure = EmitEventFailureHandling.WriteToSelfLog |
EmitEventFailureHandling.WriteToFailureSink |
EmitEventFailureHandling.RaiseCallback,
FailureSink = new FileSink("./failures.txt", new JsonFormatter(), null)
})
Official documentation 仅显示 EmitEventFailure
的基本示例,如下所示:
"emitEventFailure": "WriteToSelfLog"
它没有说明 EmitEventFailures
的组合(多个标志)应该如何写。 FailureSink
的情况相同:
"failureSink": "My.Namespace.MyFailureSink, My.Assembly.Name"
我不知道这到底是什么意思,也无法理解上面列出的代码示例。
最后,对于 FailureCallback
,文档没有提及通过 appsettings.json
执行此操作的任何选项。但是这个选项对我来说没什么大不了的,最差我可以省略它。
感谢任何提示!
经过长时间的研究,我得出了以下答案。
对于“emitEventFailure”属性,我们只需要在值之间加上逗号,如下所示:
"emitEventFailure": "WriteToFailureSink, WriteToSelfLog, RaiseCallback",
关于failureSink属性,复杂的参数值绑定可以参考这个link。在指定每个参数(包括参数的对象)之前,我们需要设置对象的“类型”。
在我的示例中是将 azure blob 存储设置为故障接收器:
"failureSink": {
"type": "Serilog.Sinks.AzureBlobStorage.AzureBatchingBlobStorageSink, Serilog.Sinks.AzureBlobStorage",
"blobServiceClient": {
"type": "Azure.Storage.Blobs.BlobServiceClient, Azure.Storage.Blobs",
"connectionString": "DefaultEndpointsProtocol=https;AccountName=xyz;AccountKey=xyzkey;EndpointSuffix=xyz.net"
},
"textFormatter": "Serilog.Formatting.Elasticsearch.ElasticsearchJsonFormatter, Serilog.Formatting.Elasticsearch",
"storageContainerName": "test-api",
"storageFileName": "test/{yyyy}-{MM}-{dd}.log",
"period": "0.00:00:30",
"batchSizeLimit": "1000"
}
我正在尝试在 .NET Core 3.1 (C#) 项目中配置 Serilog,但我想在 appsettings.json
中完全做到这一点。对于 file sinks 我做了所有配置 w/o 任何问题,但是对于 elasticsearch 我不知道如何将下面的行写入appsettings.json
这样它就可以工作了:
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200"))
{
FailureCallback = e => Console.WriteLine("Unable to submit event " + e.MessageTemplate),
EmitEventFailure = EmitEventFailureHandling.WriteToSelfLog |
EmitEventFailureHandling.WriteToFailureSink |
EmitEventFailureHandling.RaiseCallback,
FailureSink = new FileSink("./failures.txt", new JsonFormatter(), null)
})
Official documentation 仅显示 EmitEventFailure
的基本示例,如下所示:
"emitEventFailure": "WriteToSelfLog"
它没有说明 EmitEventFailures
的组合(多个标志)应该如何写。 FailureSink
的情况相同:
"failureSink": "My.Namespace.MyFailureSink, My.Assembly.Name"
我不知道这到底是什么意思,也无法理解上面列出的代码示例。
最后,对于 FailureCallback
,文档没有提及通过 appsettings.json
执行此操作的任何选项。但是这个选项对我来说没什么大不了的,最差我可以省略它。
感谢任何提示!
经过长时间的研究,我得出了以下答案。
对于“emitEventFailure”属性,我们只需要在值之间加上逗号,如下所示:
"emitEventFailure": "WriteToFailureSink, WriteToSelfLog, RaiseCallback",
关于failureSink属性,复杂的参数值绑定可以参考这个link。在指定每个参数(包括参数的对象)之前,我们需要设置对象的“类型”。 在我的示例中是将 azure blob 存储设置为故障接收器:
"failureSink": {
"type": "Serilog.Sinks.AzureBlobStorage.AzureBatchingBlobStorageSink, Serilog.Sinks.AzureBlobStorage",
"blobServiceClient": {
"type": "Azure.Storage.Blobs.BlobServiceClient, Azure.Storage.Blobs",
"connectionString": "DefaultEndpointsProtocol=https;AccountName=xyz;AccountKey=xyzkey;EndpointSuffix=xyz.net"
},
"textFormatter": "Serilog.Formatting.Elasticsearch.ElasticsearchJsonFormatter, Serilog.Formatting.Elasticsearch",
"storageContainerName": "test-api",
"storageFileName": "test/{yyyy}-{MM}-{dd}.log",
"period": "0.00:00:30",
"batchSizeLimit": "1000"
}