【发布时间】: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。
到目前为止,这是我的 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"
}
]
}
【问题讨论】:
-
如果我的回复有帮助,请采纳为答案(点击回复旁边的标记选项将其从灰色切换为填写。),请参阅meta.stackexchange.com/questions/5234/…
-
如果您需要进一步的帮助,请告诉我。
-
您可以使用
${configsetting}从主机配置(例如来自 appsettings.json)加载配置值。另请参阅 github.com/NLog/NLog/wiki/ConfigSetting-Layout-Renderer 然后您可以使用AddAzureKeyVault使用 Azure Key Value 中的值覆盖配置设置,另请参阅:docs.microsoft.com/en-us/aspnet/core/security/… -
添加了对原始帖子的更新。我必须在设置中遗漏一些东西才能让它写入我的文件目标。
标签: c# azure asp.net-core .net-core nlog