0

我认为标题可能有点模糊,但我想不出更好的标题。

我的用例是这样的:我有一个 Web API 项目,它正在使用一些“库”项目,负责处理业务逻辑,我想使用SerilogLogContext来放置一些属性,以便我可以跟踪操作。

我遇到的问题是,在我的入口点(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*/);

这意味着我回到了我原来的问题。

所以,似乎我在这里面临着一个我不知道如何解决的困境。也许我的思维过程朝着错误的方向发展,但无论如何,我将不胜感激。

4

0 回答 0