с помощью NLog вы можете:
Код: Выделить всё
public class MyClass
{
private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
public void foo()
{
Logger.Info("foo");
}
}
Но с Microsoft.Extensions.Logging код больше похож на:
Код: Выделить всё
public class MyClass
{
private readonly Ilogger Logger;
public MyClass(ILogger logger)
{
Logger = logger;
}
public void foo()
{
Logger.LogInformation("foo");
}
}
ОК, нет проблем, я могу получить его из ILoggerFactory.
Теперь мне нужен ILoggerFactory.
- Где мне взять ILoggerFactory? Я просто создаю глобальный объект для своей библиотеки?
- Как клиент настроит фабрику для добавления нужного ему ILoggerProvider?
- Будет ли ILoggerFactory автоматически настроен с правильными поставщиками, если клиент правильно выполнил настройку?
Внедрение зависимостей в конструкторе выглядит нормально, когда вы работаете в приложении или службе ASP.Net Core, но вам нужна общая библиотека, которую можно было бы использовать в консольном приложении или приложении WinForm/WPF?
- Что делать, если клиентская библиотека не имеет универсального хоста или не использует внедрение зависимостей?
Код: Выделить всё
//Client code
var myClass = new MyClass(); //with NLog
var myClass = new MyClass(loggerFactory.CreateLogger());
Я что-то упускаю или Microsoft.Extensions.Logging выглядит ужасно для общей библиотеки? Есть ли у вас пример кода проекта этого типа с использованием Microsoft.Extensions.Logging?
Спасибо
Подробнее здесь: https://stackoverflow.com/questions/593 ... brary-code
Мобильная версия