【问题标题】:Nlog get Azure Blob Storage connection string from AppsettingsNlog 从 Appsettings 获取 Azure Blob 存储连接字符串
【发布时间】:2021-11-06 10:22:00
【问题描述】:

我正在 Azure 中开发我的第一个 .Net Core 网站,我正在使用 NLog 和 blob 存储。我已经开始工作了,但是连接字符串现在是硬编码在 NLog.config 文件中的。我想将连接字符串移动到 appsettings.json 文件中,以便我可以根据我在 CI/CD 管道中将其发布到的位置为 Dev/Stage 环境更改它。我发现以下文章使用 Azure Key Vault 作为连接字符串,最终我们将开始使用 Key Vault,但我们还没有到那个时候。我需要使用的函数是本文中的 UpdateNLogConfig,我将从 appsettings.json 中提取连接,然后将其设置为 GDC,然后我将从 NLog.config 文件中检索该 GDC。我不确定何时/在何处调用 UpdateNLogConfig。

https://www.taithienbo.com/securely-log-to-blob-storage-using-nlog-with-connection-string-in-key-vault/

到目前为止,这是我的 Program.cs 中的内容。我知道我还需要在此处添加UpdateNLogConfig()

public class Program
    {
        public static void Main(string[] args)
        {
            //var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
            try
            {
                CreateHostBuilder(args).Build().Run();
            }
            catch (Exception exception)
            {
                //logger.Error(exception, "Stopped program because of exception.");
                throw;
            }
            finally
            {
                // Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux)
                NLog.LogManager.Shutdown();
            }
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
              .ConfigureWebHostDefaults(webBuilder =>
              {
                  webBuilder.UseStartup<Startup>();
              })
              .ConfigureLogging(logging =>
              {
                  logging.ClearProviders();
                  logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
              })
              .UseNLog();  
    }

更新:

我正在转换为在我的 appsettings.json 中设置 NLog 配置,而不是使用 NLog.config 文件。我遵循了建议的线程并提出了以下内容。它将写入internal-nlog.txt 文件,但我无法创建它或写入我的LocalTarget。我觉得它必须安装和配置,因为它正在写入 internal-nlog.txt,但我可以看到是什么导致它不写入我的 LocalTarget。

程序.cs

 public class Program
    {
        public static void Main(string[] args)
        {
            var config = new ConfigurationBuilder()
              .SetBasePath(System.IO.Directory.GetCurrentDirectory())
              .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).Build();
            NLog.Config.LoggingConfiguration nlogConfig = new NLogLoggingConfiguration(config.GetSection("NLog"));

            var logger = NLog.Web.NLogBuilder.ConfigureNLog(LogManager.Configuration).GetCurrentClassLogger();
            try
            {
                logger.Debug("Initialize main");

                CreateHostBuilder(args).Build().Run();
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Stopped program because of exception.");
                //throw;
            }
            finally
            {
                NLog.LogManager.Shutdown();
            }
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
              .ConfigureWebHostDefaults(webBuilder =>
              {
                  webBuilder.UseStartup<Startup>();
              })
              .ConfigureLogging(logging =>
              {
                  logging.ClearProviders();
                  logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
              })
              .UseNLog();  // NLog: Setup NLog for Dependency injection
    }

appsettings.json

  "NLog": {
    "internalLogLevel": "Info",
    "internalLogFile": "c:\\temp\\NLog\\internal-nlog.txt",
    "extensions": {
      "NLog.Web.AspNetCore": {
        "assembly": "NLog.Web.AspNetCore"
      }
    },
    "targets": {
      "LocalTarget": {
        "type": "File",
        "fileName": "c:\\temp\\NLog\\PayDocs_${shortdate}.log",
        "layout": "${longdate} | ${uppercase:${level}} | ${callsite} | ${message}"
    },
    "rules": [
      {
        "logger": "*",
        "minLevel": "Trace",
        "writeTo": "LocalTarget"
      },
      {
        "logger": "Microsoft.*",
        "maxLevel": "Info",
        "final": "true"
      }
    ]
  }

【问题讨论】:

标签: c# azure asp.net-core .net-core nlog


【解决方案1】:

UpdateNLogConfig只是加载nlog配置,是自定义方法。

您可以通过以下代码从appsettings.json 加载您的配置。

var config = new ConfigurationBuilder()
                .SetBasePath(System.IO.Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).Build();
NLog.Config.LoggingConfiguration nlogConfig = new NLogLoggingConfiguration(config.GetSection("NLog"));

*更多详情,您可以参考下面的相关帖子。 *

How can I configure NLog in .NET Core with appsettings.json instead of an nlog.config file?

【讨论】:

  • 好主意。我忘了从 appsettings 文件而不是 NLog.config 调用 NLog 设置。今天下午我将尝试在我的网站上进行更改。我会告诉你进展如何。
  • @Caverman 如果我的回复有帮助,请接受它作为答案(点击回复旁边的标记选项将其从灰色切换为填写。),请参阅meta.stackexchange.com/questions/5234/…
猜你喜欢
  • 2021-11-11
  • 2019-05-27
  • 2020-07-14
  • 2021-08-24
  • 1970-01-01
  • 2021-04-30
  • 2015-11-04
  • 1970-01-01
  • 2017-10-24
相关资源
最近更新 更多