Зарегистрируйте NLog в качестве поставщика Microsoft.Extensions.Logging для других компонентов.

Я пишу консольное приложение .Net Core. Я сам по себе широко использую NLog в своем приложении. (Вызов NLog.LogManager.GetCurrentClassLogger() и вызывая для этого методы журнала.)

Я использую Entity Framework, который позволяет управлять создаваемыми журналами. Я использую NLogLoggerFactory, предоставленный проектом NLog.Extensions.Logging . Это работает, и я вижу соответствующие сообщения журнала Entity Framework в моем файле журнала.

      public class MyDataContext : Microsoft.EntityFrameworkCore.DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder builder)
    {
        builder.UseLoggerFactory(new NLog.Extensions.Logging.NLogLoggerFactory());
    }
}

Однако я хотел бы внести это изменение глобально, а не только для этого. Я хочу, чтобы все, что пытается получить регистратор от Microsoft.Extensions.Logging, получило тот, который записывает в журналы NLog.

Инструкции, которые я нашел до сих пор, похоже, сосредоточены на приложениях, в которых у вас уже есть объект ServiceCollection, и добавлении к нему поставщика NLog. Учебник NLog и MEL делает это так же, создавая ServiceCollection , а затем извлечение пользовательского класса из этой коллекции. У меня нет ServiceCollection, поэтому мне это не помогает.

Есть ли способ сделать эту регистрацию глобально?


Ответы на комментарии:

  • Другой вопрос о ведении журнала без внедрения зависимостей
    • Этот вопрос заключался в том, «как использовать регистратор расширений журналов MS Logging Extensions», где ответ был «создайте собственный LoggerFactory для создания объектов регистратора», и автор вопроса в конечном итоге использовал NLog так же, как я его уже использую. Мне нужно повлиять на фабрику регистраторов по умолчанию, что бы ни разрешилось, если я не использую ServiceCollection для их создания.
  • Какая у вас установка? В общем, у вас где-то есть ServiceCollection
    • У меня нет коллекции ServiceCollection, по крайней мере, той, которую я создал. Для EFCore DbContext я создаю его с помощью конструктора по умолчанию, используя простой new MyDataContext().
    • Если я не вызываю builder.UseLoggerFactory в OnConfiguring, он получает регистратор из ... предположительно откуда-то, что в конечном итоге, насколько я могу судить, нигде не пишет никаких сообщений.
    • Везде, где EFCore DbContext получает свой регистратор по умолчанию, если я не вызываю UseLoggerFactory, по-видимому, другие вещи также получают регистратор оттуда, и это то, что я хочу установить, чтобы больше вещей записывалось в журналы моего приложения.

0 ответов

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