У меня есть приложение WPF. net -core 3, и я пытаюсь использовать Microsoft ILogger<T>
с системой внедрения зависимостей Caliburn.Micro, но я не знаю, как зарегистрироваться в SimpleContainer
универсальном c ILogger
.
То, что я до сих пор делал, это создание ILoger
из LoggerFactory
:
var serilog = ConfigureLogger();
ILoggerFactory loggerFactory = new LoggerFactory().AddSerilog(serilog);
ILogger logger = loggerFactory.CreateLogger("");
container.RegisterInstance(typeof(ILogger<>), nameof(Microsoft.Extensions.Logging.ILogger), logger);
private static Serilog.ILogger ConfigureLogger()
{
return new LoggerConfiguration()
.MinimumLevel.Information()
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
.MinimumLevel.Override("System", LogEventLevel.Warning)
.Enrich.FromLogContext()
.WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}{NewLine}", theme: AnsiConsoleTheme.Literate)
.WriteTo.File("log.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
}
Это не будет работать, если я буду запрашивать в представлении смоделируйте экземпляр ILooger<MyType>
, поскольку регистратор был создан с пустой строкой в качестве имени категории.
Должен ли я использовать отражение для создания экземпляра регистратора для каждого типа в моем приложении? Это звучит не очень хорошо.
Я знаю, что могу ввести LoggerFactory
непосредственно в DI, но это будет означать перефакторинг всех библиотек классов, чтобы использовать его вместо ILogger
напрямую.