Использование Serilog контекстно без зависимости
Я думаю, что название может быть немного расплывчатым, но я не мог придумать лучшего названия.
Мой пример использования таков: у меня есть проект веб-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*/);
что означает, что я вернулся к своей первоначальной проблеме.
Итак, кажется, что передо мной стоит дилемма, которую я не знаю, как решить. Может быть, мой мыслительный процесс движется в неправильном направлении, но в любом случае, я был бы признателен за любую помощь.