Serilog ElasticSearch 接收器在 WebApi 中不起作用
Serilog ElasticSearch sink not working in WebApi
我在 Azure 辅助角色中使用 Serilog,在 ElasticSearch 接收器中使用 WebApi。
Worker 角色一切正常。
在 WebApi 上,我尝试了跟踪和电子邮件接收器,它们工作正常。 ElasticSearch 接收器根本不记录。
这是我的配置:
var logger = new LoggerConfiguration()
.MinimumLevel.Information()
.WriteTo.Trace()
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("https://myElasticServer")))
.CreateLogger();
如果我尝试在控制器中写入日志,我在 Trace 中有它们,但在 Trace 中没有。
问题出在自签名证书上。
我创建了自己的 CertificateValidation 方法来忽略基于排除列表的证书验证
private bool MyCertificateValidationCallback(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
return true;
var request = sender as HttpWebRequest;
if (request != null)
{
var exclusion = ConfigurationManager.AppSettings["CertificateExclusion"];
if (exclusion.Contains(request.Host))
return true;
}
return false;
}
并在应用启动时注册
ServicePointManager.ServerCertificateValidationCallback = MyCertificateValidationCallback;
我在 Azure 辅助角色中使用 Serilog,在 ElasticSearch 接收器中使用 WebApi。
Worker 角色一切正常。
在 WebApi 上,我尝试了跟踪和电子邮件接收器,它们工作正常。 ElasticSearch 接收器根本不记录。
这是我的配置:
var logger = new LoggerConfiguration()
.MinimumLevel.Information()
.WriteTo.Trace()
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("https://myElasticServer")))
.CreateLogger();
如果我尝试在控制器中写入日志,我在 Trace 中有它们,但在 Trace 中没有。
问题出在自签名证书上。
我创建了自己的 CertificateValidation 方法来忽略基于排除列表的证书验证
private bool MyCertificateValidationCallback(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
return true;
var request = sender as HttpWebRequest;
if (request != null)
{
var exclusion = ConfigurationManager.AppSettings["CertificateExclusion"];
if (exclusion.Contains(request.Host))
return true;
}
return false;
}
并在应用启动时注册
ServicePointManager.ServerCertificateValidationCallback = MyCertificateValidationCallback;