首页 文章

Serilog MVC集成

提问于
浏览
2

我有一个项目使用第三方软件,使用Serilog . 为此,我将以下内容添加到Startup.cs文件中的Startup方法中 .

Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Verbose()
            .ReadFrom.ConfigurationSection(Configuration.GetSection("Logging:Serilog"))
        .CreateLogger();

在一个单独的项目中,我有一个服务层,它使用基于Microsoft.Extensions.Logging.ILogger的日志记录机制 .

现在我将UI添加到我的初始项目中,并通过Service Collection将Microsoft.Extensions.Logging.ILogger注入我的控制器类;然后我将使用(内部控制器)来创建服务层对象 .

挑战是;我想将现有的Serilog Logger 注入这些控制器 . 无法找到将其添加到我的服务集合的简洁方法,以便控制器可以通过DI获取 . 有什么建议?

1 回答

  • 1

    解决方案是在Dependency Injection容器中注册已存在的Logger对象的实例 . 然后,这个单个实例将被传递给控制器的构造函数,而不是每次都创建一个新实例 .

    执行此操作的代码将取决于您使用的特定依赖注入框架,但在Unity中,它将是

    container.RegisterInstance<ILogger>(Log.Logger)
    

    这应该在您发布的代码之后,在其中实例化 Log.Logger .

    您还可以通过定义自己的 ILogger 接口使代码更加可重用,如this answer中所述,这样您的控制器就不会绑定到 Serilog.ILogger 接口 .

相关问题