【发布时间】:2018-10-09 22:53:48
【问题描述】:
不久前,我们开始将我们的记录器从 log4net 替换为 Serilog,以便将我们的日志直接发送到我们的 Elastic。在我们的项目中,我们正在使用IOC 使用Autofac。因此,我们最初创建了一个包装类 (LogSerilog) 和一个相应的接口 (ILogSerilog),我们将它们添加到我们的构建器中,而在类 LogSerilog 中我们配置了 root logger。
public class LogSerilog : ILogSerilog
{
private readonly IElasticConfiguration configuration;
public LogSerilog(IElasticConfiguration configuration)
{
this.configuration = configuration;
Init();
}
public void Init()
{
var logger = new LoggerConfiguration().MinimumLevel.Information().Enrich.WithMachineName();
try
{
logger.WriteTo.Elasticsearch(
this.configuration.GetElasticPath(), typeName: "Serilog");
}
catch (Exception)
{
//Swallow - Elastic is N/A don't wan't to crash. logging won't help since I don't have logger yet :)
}
logger.WriteTo.Log4Net();
Log.Logger = logger.CreateLogger();
}
..........
在那之后,我看到了autofac-serilog-integration Nuget,这对我来说似乎是最好的解决方案。因为它会为我们连接所有上下文。问题是它似乎不起作用。甚至,log4net sink(我们仍然使用log4net在机器中拥有日志的副本)也无法正常工作!我觉得我在这里做错了什么 - 但我不确定我应该如何解决它。
- 如果我要删除包装类,我应该在哪里配置根记录器?
- log4net sink 的问题与包装类无关吗?
- 欢迎任何其他提示,如果您发现我以错误的方式接近它。
【问题讨论】:
标签: c# inversion-of-control log4net autofac serilog