首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以将Serilog.ILogger转换为Microsoft.Extensions.Logging.ILogger吗?

可以将Serilog.ILogger转换为Microsoft.Extensions.Logging.ILogger吗?
EN

Stack Overflow用户
提问于 2020-12-25 06:56:50
回答 2查看 2.8K关注 0票数 7

我有记录到Microsoft.Extensions.Logging.ILogger (主要是扩展方法)的代码。

我已经将Serilog配置为实际执行日志记录。

我找不到将Serilog.ILogger转换为Microsoft.Extensions.Logging.ILogger的方法。我假设Serilog将实现Microsoft.Extensions.Logging.ILogger,但它似乎并非如此。

有没有办法在Serilog Logger上获得Microsoft.Extensions.Logging.ILogger接口??-谢谢

我的代码是:

代码语言:javascript
复制
        Serilog.Core.Logger seriLogger = new Serilog.LoggerConfiguration()
            .WriteTo.Console()
            .CreateLogger();
        Serilog.ILogger seriILogger = seriLogger;

        Microsoft.Extensions.Logging.ILogger msLogger = seriILogger;

产生

代码语言:javascript
复制
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’类型

EN

回答 2

Stack Overflow用户

发布于 2021-07-28 19:56:02

除了安装Serilog.AspNetCore之外,您还可以安装Serilog.Extensions.Logging并使用这些代码行。这将让您了解UseSerilog()在幕后是如何工作的(好吧,或多或少是这样的:D)。

代码语言:javascript
复制
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容器中使用记录器,请使用以下代码行:

代码语言:javascript
复制
Log.Logger = serilogLogger;

var container = new ServiceCollection()
    .AddLogging(x => x.AddSerilog())
    .BuildServiceProvider(true);
票数 7
EN

Stack Overflow用户

发布于 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,这提供了一个很好的概述。根据您的应用程序类型,您可能不需要所有这些功能,但它应该为您提供一些上下文,了解如何将所有这些功能组合在一起。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65443870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档