Nlog 从 Appsettings 获取 Azure Blob Storage 连接字符串
Nlog get Azure Blob Storage connection string from Appsettings
我正在 Azure 中创建我的第一个 .Net Core 网站,我正在使用 NLog 和 blob 存储。我已经开始工作了,但是连接字符串现在硬编码在 NLog.config 文件中。我想将连接字符串移动到 appsettings.json 文件中,以便我可以根据我在 CI/CD 管道中将其发布到的位置为任一 Dev/Stage 环境更改它。我发现以下文章使用 Azure Key Vault 作为连接字符串,最终我们将开始使用 Key Vault,但我们还没有到那个时候。我需要使用的函数是文章中的 UpdateNLogConfig,我将从 appsettings.json 中拉出连接,然后将其设置为 GDC,然后我将从 NLog.config 文件中检索它。我不确定 when/where 我是否调用 UpdateNLogConfig。
这是我目前 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。我觉得必须安装和配置它,因为它正在写入内部-nlog.txt,但我看不出是什么导致它不写入我的 LocalTarget。
Program.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"
}
]
}
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"));
*更多详情可参考下方相关post。 *
我正在 Azure 中创建我的第一个 .Net Core 网站,我正在使用 NLog 和 blob 存储。我已经开始工作了,但是连接字符串现在硬编码在 NLog.config 文件中。我想将连接字符串移动到 appsettings.json 文件中,以便我可以根据我在 CI/CD 管道中将其发布到的位置为任一 Dev/Stage 环境更改它。我发现以下文章使用 Azure Key Vault 作为连接字符串,最终我们将开始使用 Key Vault,但我们还没有到那个时候。我需要使用的函数是文章中的 UpdateNLogConfig,我将从 appsettings.json 中拉出连接,然后将其设置为 GDC,然后我将从 NLog.config 文件中检索它。我不确定 when/where 我是否调用 UpdateNLogConfig。
这是我目前 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。我觉得必须安装和配置它,因为它正在写入内部-nlog.txt,但我看不出是什么导致它不写入我的 LocalTarget。
Program.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"
}
]
}
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"));
*更多详情可参考下方相关post。 *