我认为标题可能有点模糊,但我想不出更好的标题。
我的用例是这样的:我有一个 Web API 项目,它正在使用一些“库”项目,负责处理业务逻辑,我想使用Serilog
它LogContext
来放置一些属性,以便我可以跟踪操作。
我遇到的问题是,在我的入口点(Web API 项目)中,我没有这些属性能够执行以下操作:
using (LogContext.PushProperty("MyProperty", "my-value"))
{
DoStuff();
}
在我的“库”项目中,我拥有这些属性的值,但我觉得我的业务逻辑不一定要依赖于Serilog.Context
能够添加属性。
我想说的是,Serilog
理想情况下,依赖项应该在我的入口点项目中,而我的业务逻辑应该依赖于某种接口。
从这里,我知道它ILogEventEnricher
存在,但首先它意味着我的业务逻辑中的依赖Serilog
。此外,它需要知道它试图设置的属性,但鉴于我需要在开头和我的入口点项目中添加它,如下所示:
Log.Logger = new LoggerConfiguration()
.Enrich.With(new MyLogEnricher(/* I need to pass the "not-yet-known" object here*/);
这意味着我回到了我原来的问题。
所以,似乎我在这里面临着一个我不知道如何解决的困境。也许我的思维过程朝着错误的方向发展,但无论如何,我将不胜感激。