这里有一个答案:如何将依赖项传递给 Serilog Enricher?这解释了您可以传入一个实例。
但是要做到这一点,我需要在我的依赖注入代码运行后移动我的记录器设置(在startup.cs)
这意味着不会记录启动错误,因为记录器还没有准备好。
有没有办法以某种方式配置 serilog 以在我的Main()方法中运行,但也可以使用 DI 项目丰富数据?尽管 DI 项是单例,但它还有更多的依赖项(主要是数据库连接)。
我已经用谷歌搜索了这个并阅读了一些关于向上下文添加内容的内容,但我一直无法找到一个我可以适应的完整工作示例。
我发现的大多数示例都涉及将代码放入控制器以附加信息,但我希望这对每个日志条目全局可用。
我的主要开始于:
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(elasticUri))
{
AutoRegisterTemplate = true,
})
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
在进入 .NET Core MVC 代码之前
CreateWebHostBuilder(args).Build().Run();
我的 DI 对象基本上是一个“UserData”类,其中包含用户名、companyid 等。这些属性在访问时会访问数据库以获取基于某些当前身份的值(尚未实现)。它被我的 DI 注册为单身人士。