我编写了一个函数来返回一个 ILogger 实例。这样我就可以在我的所有代码中获得一致的日志记录。
我的问题是,当从不同类型的运行时/程序调用时,日志记录有时会在某些运行时失败!即,如果我使用 WebAPI 进行日志记录,一切都很好,但如果我在 Azure 函数 V1 中使用它,它就永远不会工作。
记录器不会抛出或以其他方式指示任何错误。我唯一失败的迹象是 Kibana/ElasticSearch 中没有任何显示。
如何调试/故障排除使用 ElasticSearch 的 serilog 接收器制作的 Ilogger 实例?
public static Microsoft.Extensions.Logging.ILogger CreateILogger(string loggerName, string elasticPassword, string elasticIndexName = "logs-index-{0:yyyy.MM}")
{
var elasticNodeURI = "https://1234567890.southeastasia.azure.elastic-cloud.com:9243";
var elasticTemplateName = "logstemplate";
var serilogLogger = new LoggerConfiguration()
.Enrich.FromLogContext()
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(elasticNodeURI))
{
IndexFormat = elasticIndexName,
AutoRegisterTemplate = true,
InlineFields = true,
TemplateName = elasticTemplateName,
ModifyConnectionSettings = x => x.BasicAuthentication("LogUser", elasticPassword),
AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv6,
MinimumLogEventLevel = Serilog.Events.LogEventLevel.Debug,
CustomFormatter = new ElasticsearchJsonFormatter()
});
var loggerFactory = (ILoggerFactory)new LoggerFactory();
loggerFactory.AddSerilog(serilogLogger.CreateLogger());
return loggerFactory.CreateLogger(loggerName);
}