专门针对.Net core 3.1的NLog配置,通过名称/env指定nlog文件,并启用DI [英] NLog Configuration specifically for .net core 3.1 specifying the nlog file by name/env, and enabling DI

查看:0
本文介绍了专门针对.Net core 3.1的NLog配置,通过名称/env指定nlog文件,并启用DI的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何将ASP.NET core 3.1应用程序配置为使用NLog,特别是设置一个自定义日志文件名(即nlog.[环境].config,并为DI启用。我尝试了很多东西,但都没有成功。

我知道有很多关于nlog配置的SO问题和在线文章,但我似乎找不到适用于我的特定场景和要求的示例。我对使用替代方法持开放态度,例如通过appsetups.[env].json进行配置,但希望避免多个web.config文件

我试过的一个例子:

public static void Main(string[] args)
{
    var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");   

    var logFile = "nlog.config";
    if (environment.Contains("Debug") || environment.Contains("Local"))
        logFile = "nlog.debug.config";

    // logger works only in Main() method, not as DI
    var logger = NLogBuilder.ConfigureNLog(logFile).GetCurrentClassLogger();

    logger.Info("Starting My App");
    CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
    .ConfigureAppConfiguration((hostingContext, config) =>
    {
        config.Sources.Clear();

        var env = hostingContext.HostingEnvironment;

        config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json",
                            optional: true, reloadOnChange: true);

        config.AddEnvironmentVariables();

        if (args != null)
        {
            config.AddCommandLine(args);
        }
    })
    ... 
    .ConfigureLogging((hostingContext, logging) =>
    {
        logging.ClearProviders();
        logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Debug);
        logging.AddConsole();
    })
    .UseNLog(config); // << config has error, I can't seem to find a way to instanciate config. 
}

推荐答案

您还可以考虑将特定于环境的设置放置在默认的appsettings.json中,并用appsettings.[environment].json覆盖。然后使用NLog.config中的${configsetting}加载活动设置。

使用以下命令效果最佳:

var logger = NLog.LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger();
logger.Info("Starting My App");

不再使用这个:

var logger = NLogBuilder.ConfigureNLog(logFile).GetCurrentClassLogger();
logger.Info("Starting My App");

另见:https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-3

另见:https://github.com/NLog/NLog.Extensions.Logging/wiki/NLog-configuration-with-appsettings.json

这篇关于专门针对.Net core 3.1的NLog配置,通过名称/env指定nlog文件,并启用DI的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆