我有记录到 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;
Run Code Online (Sandbox Code Playgroud)
产生
Cannot implicitly convert type 'Serilog.ILogger' to 'Microsoft.Extensions.Logging.ILogger'. An explicit conversion exists (are you missing a cast?)
Run Code Online (Sandbox Code Playgroud)
演员表给我一个运行时错误:
无法将“Serilog.Core.Logger”类型的对象转换为“Microsoft.Extensions.Logging.ILogger”
mih*_*ins 53
除了安装之外,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>
Run Code Online (Sandbox Code Playgroud)
或者,如果您需要在 DI 容器中使用记录器,请使用以下代码行:
Log.Logger = serilogLogger;
var container = new ServiceCollection()
.AddLogging(x => x.AddSerilog())
.BuildServiceProvider(true);
Run Code Online (Sandbox Code Playgroud)
TL;DR 不,不是直接的。编译器正确地拒绝转换,因为 Serilog ILogger / Logger 不直接实现 MELILogger接口(Serilog 项目开始于 2012 年左右,并且始终设计为独立于该框架或以后的任何特定框架运行......)
然而,有一个桥接层实现了 MELILogger接口,转发到 Serilog ILogger-有一篇关于此主题的介绍文章提供了很好的概述。根据您的应用程序类型,您可能不需要所有这些,但它应该为您提供一些关于它们如何组合在一起的背景信息。
| 归档时间: |
|
| 查看次数: |
1482 次 |
| 最近记录: |