Зарегистрируйте 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, по-видимому, другие вещи также получают регистратор оттуда, и это то, что я хочу установить, чтобы больше вещей записывалось в журналы моего приложения.
- У меня нет коллекции ServiceCollection, по крайней мере, той, которую я создал. Для EFCore DbContext я создаю его с помощью конструктора по умолчанию, используя простой