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
相关产品推荐
相关产品推荐

