Gre*_*een 5 c# log4net inversion-of-control autofac serilog
不久之前,我们开始将log4net中的记录器替换为Serilog,以便将我们的日志直接发送到我们的Elastic.在我们的项目中,我们正在IOC使用Autofac.因此,我们最初创建了一个包装器类(LogSerilog)和ILogSerilog我们添加到构建器的相应接口(),当LogSerilog我们在类中配置了 根记录器时.
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();
}
..........
Run Code Online (Sandbox Code Playgroud)
之后我看到autofac-serilog-integration Nuget对我来说似乎是最好的解决方案.因为它将为我们连接所有上下文.问题是,它似乎不起作用.甚至更多,log4net接收器(我们仍然使用log4net来获取机器中的日志副本)也不起作用!我觉得我在这里做错了 - 但我不知道该怎么办呢.
经过一番调查,我找到了我的问题的答案。
Autofac Serilog integration不支持它并且您需要自己提供上下文。