C# 用户ILogger<;T>;带Caliburn.微型SimpleContainer
我有一个.net core 3 WPF应用程序,我正在尝试将Microsoft的C# 用户ILogger<;T>;带Caliburn.微型SimpleContainer,c#,wpf,.net-core,caliburn.micro,C#,Wpf,.net Core,Caliburn.micro,我有一个.net core 3 WPF应用程序,我正在尝试将Microsoft的ILogger与Caliburn.Micro dependency injection系统一起使用,但我不知道如何在SimpleContainer通用ILogger中注册 到目前为止,我所做的是从日志工厂创建ILoger: var serilog = ConfigureLogger(); ILoggerFactory loggerFactory = new LoggerFactory().AddSerilog(ser
ILogger
与Caliburn.Micro dependency injection系统一起使用,但我不知道如何在SimpleContainer
通用ILogger
中注册
到目前为止,我所做的是从日志工厂创建ILoger
:
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();
}
var serilog=ConfigureLogger();
ILoggerFactory loggerFactory=新loggerFactory().AddSerilog(serilog);
ILogger logger=loggerFactory.CreateLogger(“”);
RegisterInstance(typeof(ILogger)、nameof(Microsoft.Extensions.Logging.ILogger)、logger);
专用静态Serilog.ILogger ConfigureLogger()
{
返回新的LoggerConfiguration()
.MinimumLevel.Information()
.MinimumLevel.Override(“Microsoft”,LogEventLevel.Warning)
.MinimumLevel.Override(“系统”,LogEventLevel.Warning)
.Enrich.FromLogContext()的
控制台(输出模板:“[{Timestamp:HH:mm:ss}{Level:u3}]{Message:lj}{NewLine}{Exception}{NewLine}”,主题:AnsiConsoleTheme.Literate)
.WriteTo.File(“log.txt”,rollingInterval:rollingInterval.Day)
.CreateLogger();
}
如果我在视图模型中请求一个ILooger
的实例,这将不起作用,因为记录器是使用空字符串作为类别名称创建的
我是否应该使用反射为应用程序中的每种类型创建记录器实例?这听起来不太好
我知道我可以直接在DI中注入一个LoggerFactory
,但这意味着要重新考虑所有类库以使用它,而不是直接使用ILogger
。您可以使用不同的DI容器,这是一个好主意。我会去做的。