c# - 如何将 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();
}
..........
在那之后,我看到了autofac-serilog-integration Nuget,这对我来说似乎是最好的解决方案。因为它会为我们连接所有上下文。问题是它似乎不起作用。甚至,log4net sink(我们仍然使用log4net在机器中拥有日志的副本)也无法正常工作!我觉得我在这里做错了什么 - 但我不确定我应该如何解决它。
- 如果我要删除包装类,我应该在哪里配置根记录器?
- log4net sink 的问题与包装类无关吗?
- 如果您看到我以错误的方式接近它,任何其他提示都会受到欢迎。
解决方案
经过一番调查,我找到了我的问题的答案。
- 如果我要删除包装类,我应该在哪里配置根记录器?
在主类中——就在程序开始运行\第一次需要登录之前。 - log4net sink 的问题与包装类无关吗?
不,它与对旧 log4net dll 版本的引用有关 - 如果您看到我以错误的方式接近它,任何其他提示都会受到欢迎。
拥有 Serilog 包装器并没有真正的问题 - 这不是问题 - 但我确实发现它有问题,因为例如Autofac Serilog integration
它不支持它并且您需要自己提供上下文。
推荐阅读
- python - 卸载 Python 会不会很危险
- java - 使用数组反序列化对象会使用 GSON 返回 null,为什么?
- pandas - 熊猫列表条件和值分配
- android - Logcat 不断推送错误“输入 svInfo.flags 为 8”
- c# - 查找数据表的空值
- java - Is there a regex expression suitable for splitting two one digit numbers separated by a whitespace?
- java - 找不到在 MacOS Big Sur 上安装 Apache NetBeans IDE 的 JDK
- excel - 可视化每个销售员随时间推移的销售百分比 Power Bi
- c# - 将控制台输出写入 .txt
- javascript - 有人可以向我解释一下 React Javascript 的 props 是如何存储在这个组件中的吗