Использование 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*/);

что означает, что я вернулся к своей первоначальной проблеме.

Итак, кажется, что передо мной стоит дилемма, которую я не знаю, как решить. Может быть, мой мыслительный процесс движется в неправильном направлении, но в любом случае, я был бы признателен за любую помощь.

0 ответов

Другие вопросы по тегам