Есть ли способ получить контекст, чтобы я мог получить loggerName
и использовать LogManager.GetLogger(loggerName)
вместо LogManager.GetCurrentClassLogger()
?
Я заметил, что container.RegisterConditional()
имеет доступ к контексту.
Также я хочу пока избегать таких решений, как SimpleLogging.NLog.
Наконец, я готов признать, что это не правильный подход. Кстати, AOP - это вариант, который я уже исследовал (Это хорошая практика - использовать регистратор в качестве синглтона?).
Примечание. Мне известно, что GetCurrentClassLogger()
получает ту же информацию, которую я получал бы с помощью отражения .NET.
using NLog;
using SimpleInjector;
namespace DependencyInjection
{
class Program
{
private static Container _container;
static void Main(string[] args)
{
Bootstrap();
_container.GetInstance<Greeter>().Greet();
}
private static void Bootstrap()
{
_container = new Container();
_container.Register<ILogger>(() => LogManager.GetCurrentClassLogger(), Lifestyle.Transient);
_container.Register<Greeter>();
_container.Verify();
}
public class Greeter
{
private ILogger _logger;
public Greeter(ILogger logger)
{
_logger = logger;
}
public void Greet()
{
_logger.Log(LogLevel.Info, "Hello world!");
}
}
}
}