我有记录到Microsoft.Extensions.Logging.ILogger (主要是扩展方法)的代码。
我已经将Serilog配置为实际执行日志记录。
我找不到将Serilog.ILogger转换为Microsoft.Extensions.Logging.ILogger的方法。我假设Serilog将实现Microsoft.Extensions.Logging.ILogger,但它似乎并非如此。
有没有办法在Serilog Logger上获得Microsoft.Extensions.Logging.ILogger接口??-谢谢
我的代码是:
Serilog.Core.Logger seriLogger = new Serilog.LoggerConfiguration()
.WriteTo.Console()
.CreateLogger();
Serilog.ILogger seriILogger = seriLogger;
Microsoft.Extensions.Logging.ILogger msLogger = seriILogger;产生
Cannot implicitly convert type 'Serilog.ILogger' to 'Microsoft.Extensions.Logging.ILogger'. An explicit conversion exists (are you missing a cast?)强制转换会导致运行时错误:
无法将'Serilog.Core.Logger‘类型的对象强制转换为'Microsoft.Extensions.Logging.ILogger’类型
发布于 2021-07-28 19:56:02
除了安装Serilog.AspNetCore之外,您还可以安装Serilog.Extensions.Logging并使用这些代码行。这将让您了解UseSerilog()在幕后是如何工作的(好吧,或多或少是这样的:D)。
var serilogLogger = new LoggerConfiguration()
.Enrich.FromLogContext()
.MinimumLevel.Verbose()
.WriteTo.Debug() // Serilog.Sinks.Debug
.CreateLogger();
var microsoftLogger = new SerilogLoggerFactory(serilogLogger)
.CreateLogger<IMyService>(); // creates an instance of ILogger<IMyService>或者,如果您需要在DI容器中使用记录器,请使用以下代码行:
Log.Logger = serilogLogger;
var container = new ServiceCollection()
.AddLogging(x => x.AddSerilog())
.BuildServiceProvider(true);发布于 2020-12-25 17:26:18
不,不是直接的。编译器正确地拒绝转换,因为Serilog ILogger / Logger不直接实现MEL ILogger接口( Serilog项目始于2012年左右,一直被设计为独立于该项目的任何特定框架运行,或以后...)
然而,有一个实现MEL ILogger接口的桥接层,转发到Serilog ILogger - There's an intro article on this topic,这提供了一个很好的概述。根据您的应用程序类型,您可能不需要所有这些功能,但它应该为您提供一些上下文,了解如何将所有这些功能组合在一起。
https://stackoverflow.com/questions/65443870
复制相似问题