【问题标题】:How do I specify NLog's config by environment using core dependency injection?如何使用核心依赖注入按环境指定 NLog 的配置?
【发布时间】:2019-09-24 08:24:18
【问题描述】:

我正在使用带有 NLog 的 .net 核心,并尝试根据环境实现不同的设置 使用静态初始化,我得到了它的工作:

private static NLog.Logger log =
    NLog.Web.NLogBuilder.ConfigureNLog(Startup.NLogConfig).GetCurrentClassLogger();

Startup.NLogConfig 在 Startup 类中被初始化,如下所示:

if (env.IsDevelopment())
    NLogConfig = "nlog.file.config";
else
    NLogConfig = "nlog.blob.config";

但我不知道如何为依赖注入指定它:

public SomeController(ILogger<SomeController> log)
{
   // log needs to be initialized using the right config based on the environment context
}

【问题讨论】:

    标签: asp.net-core dependency-injection nlog


    【解决方案1】:

    从未使用过依赖注入,但在阅读手册时,您会使用接口,然后注册接口的具体实现。

    这是具体实现:

    NLog.Web.NLogBuilder.ConfigureNLog(Startup.NLogConfig).GetCurrentClassLogger();
    

    既然您在谈论 NetCore 和依赖注入(没有指定任何特定的依赖注入容器),那么我猜您应该使用 Microsoft 依赖注入和 Microsoft 扩展日志记录 (MEL)。

    请参阅此示例了解如何将 NLog 设置为 LoggingProvider 实现,然后使用 MEL-ILogger-interfaces:

    https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-2#4-update-programcs

    注意在启动时如何配置实现(以及设置依赖注入容器),然后所有业务逻辑类获取 ILogger 接口以执行其日志记录(到依赖注入中注册的任何实现-容器)。

    【讨论】:

    • 据我了解,在此示例中,实现在启动时配置为捕获错误,但我看不到如何通过依赖注入逻辑在后续实例化中设置 Nlog 配置文件跨度>
    • @AbirStolov 调用UseNLog 时发生的魔法是将NLog.Web.NLogBuilder 中启动时加载的NLog.config 与ILogger 接口连接起来。
    • 好的,那我如何在UseNLog方法中指定设置文件呢?
    • @AbirStolov 现在推荐的方法是在设置依赖注入之前设置 NLog-config。另请参阅我的答案中的链接。但很快 NLog.Web.AspNetCore 版本。 4.9 即将发布。然后你可以使用ILoggingBuilder.AddNLog("nlog.config")
    猜你喜欢
    • 2018-01-03
    • 1970-01-01
    • 2018-12-14
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 2021-03-19
    • 1970-01-01
    相关资源
    最近更新 更多