如何在NLog中引用appsettings.json内的数据库连接字符串?
解决NLog引用appsettings.json中连接字符串的问题
首先,你遇到的问题大概率是用错了NLog的配置占位符——${appsetting}是针对传统.NET Framework里的app.config/web.config的,而在.NET Core/.NET 5+的appsettings.json环境下,应该用${configsetting}来读取配置项。
下面是具体的解决步骤:
1. 确保依赖包正确安装
先确认你的项目已经安装了NLog.Extensions.Logging包(这是NLog读取appsettings.json的核心依赖),如果没有的话,通过NuGet安装:
Install-Package NLog.Extensions.Logging # 或者用.NET CLI dotnet add package NLog.Extensions.Logging
2. 修改NLog配置中的连接字符串引用
把你原来的"connectionString": "${appsetting:name=ConnectionStrings.MyConnectionString}"替换成:
"connectionString": "${configsetting:name=ConnectionStrings.MyConnectionString}"
修改后的完整appsettings.json示例:
{ "ConnectionStrings": { "MyConnectionString": "Server=SQLSERVER;Database=MyDatabse;Trusted_Connection=True;" }, "NLog": { "targets": { "database": { "type": "Database", "dbProvider": "System.Data.SqlClient", "connectionString": "${configsetting:name=ConnectionStrings.MyConnectionString}" } }, "rules": [ { "logger": "*", "minLevel": "Info", "writeTo": "database" } ] } }
3. 确保NLog从appsettings.json加载配置
在Program.cs中配置NLog读取appsettings.json的配置,代码示例:
var builder = WebApplication.CreateBuilder(args); // 清除默认日志提供器,仅使用NLog builder.Logging.ClearProviders(); // 启用NLog,自动读取appsettings.json中的NLog节点 builder.Host.UseNLog(); // 其他项目配置代码... var app = builder.Build(); // 后续中间件配置... app.Run();
额外注意事项
- 如果你的NLog配置放在单独的
NLog.config文件中,同样可以用${configsetting:name=ConnectionStrings.MyConnectionString}引用appsettings.json里的连接字符串。 - 若担心大小写拼写问题,可以添加
:ignoreCase=true参数忽略大小写,比如${configsetting:name=connectionstrings.myconnectionstring:ignoreCase=true}。
内容的提问来源于stack exchange,提问作者Jogge




