You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Web API中NLog+Npgsql出现DatabaseParameterInfo配置异常求助

解决NLog 5.1.0连接PostgreSQL时的DatabaseParameterConfigurationException异常

问题根源

你遇到的'DatabaseParameterInfo' cannot assign unknown property 'parameterName'='@Exception'异常,核心原因是NLog的Database目标参数配置使用了错误的属性名:NLog要求参数配置用name而非parameterName。


解决方案1:修正NLog配置中的参数属性

将appsettings.json里NLog配置的parameters节点中的parameterName替换为name,同时结合PostgreSQL的参数命名习惯调整配置:

"NLog": {
    "throwConfigExceptions": true,
    "autoReload": true,
    "extensions": [
      { "assembly": "NLog.Extensions.Logging" },
      { "assembly": "NLog.Web.AspNetCore" }
    ],
    "targets": {
      "async": true,
      "console": {
        "type": "Console"
      },
      "database": {
        "type": "Database",
        "dbProvider": "Npgsql.NpgsqlConnection, Npgsql",
        "connectionString": "",
        "commandText": "INSERT INTO Logs (Exception) VALUES ($Exception)",
        "parameters": [
          {
            "name": "Exception", // 替换原来的parameterName
            "layout": "${exception:tostring}"
          }
        ]
      }
    },
    "rules": [
      { "logger": "*", "minLevel": "Trace", "writeTo": "console" },
      { "logger": "*", "minLevel": "Error", "writeTo": "database" }
    ]
  }

说明:PostgreSQL原生使用$作为参数前缀,这里commandText用$Exception,参数name设为Exception(不带前缀),NLog会自动适配Npgsql的参数格式。如果习惯用@前缀,Npgsql也支持,只需把commandText改为INSERT INTO Logs (Exception) VALUES (@Exception)即可,参数name仍为Exception。


解决方案2:优化连接字符串动态赋值方式

你当前直接修改配置节Value的方式不够可靠,建议改用NLog的配置API直接更新目标属性,避免配置同步问题:

var builder = WebApplication.CreateBuilder(args);
var configuration = builder.Configuration;

var dbConnectionOptions = new DbConnectionOptions(configuration);

// 加载NLog配置并更新数据库目标的连接字符串
var nlogConfig = new NLogLoggingConfiguration(configuration.GetSection("NLog"));
var dbTarget = nlogConfig.FindTargetByName<DatabaseTarget>("database");
if (dbTarget != null)
{
    dbTarget.ConnectionString = dbConnectionOptions.AppDb.ConnectionString;
}
// 应用更新后的配置
LogManager.Configuration = nlogConfig;

// 后续的WebApplication构建代码...

内容的提问来源于stack exchange,提问作者Ventan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 19:55:30