.NET 5升级.NET 6后NLog无法写入数据库问题求助
问题排查与解决方案
1. 统一NLog相关包版本
你的项目中NLog.Config版本为4.7.15,其余NLog核心包(NLog、NLog.Database等)为5.0.4,版本不一致会引发兼容性问题。将NLog.Config升级至5.x版本(建议和其他NLog包版本保持一致,比如5.0.4):
<PackageReference Include="NLog.Config" Version="5.0.4" />
2. 替换SQL客户端库
.NET 6官方推荐使用Microsoft.Data.SqlClient替代旧的System.Data.SqlClient,NLog.Database 5.x对新客户端库的支持更完善:
- 移除
System.Data.SqlClient包引用 - 添加
Microsoft.Data.SqlClient最新版本引用:
<PackageReference Include="Microsoft.Data.SqlClient" Version="5.1.2" />
- 在NLog的dbTarget配置中明确指定
dbProvider:
<target xsi:type="Database" name="dbTarget" dbProvider="Microsoft.Data.SqlClient" connectionString="你的数据库连接字符串" commandText="INSERT INTO Logs(TimeStamp, Level, Message) VALUES (@TimeStamp, @Level, @Message)"> <parameter name="@TimeStamp" layout="${longdate}" /> <parameter name="@Level" layout="${level}" /> <parameter name="@Message" layout="${message}" /> </target>
3. 检查数据库目标的SQL语句与参数
NLog 5.x对部分布局渲染器的默认行为有调整,需确保配置匹配:
- 避免使用已废弃的渲染器
- 确认参数名称与
commandText中的占位符完全一致 - 检查日志表结构是否与插入字段匹配(比如是否新增必填字段但未在参数中提供)
4. 开启更详细的NLog内部日志
当前内部日志仅显示日志路由到dbTarget,未记录数据库操作细节。修改NLog配置开启Trace级别日志,排查数据库连接或SQL执行错误:
<nlog internalLogLevel="Trace" internalLogFile="nlog-internal.log"> <!-- 你的其他NLog配置 --> </nlog>
查看生成的nlog-internal.log,寻找包含dbTarget的错误或警告信息,直接定位问题根源。
5. 验证数据库连接字符串
确认.NET 6环境下连接字符串配置正确,可直接在dbTarget中硬编码连接字符串测试,排除配置读取异常。
内容的提问来源于stack exchange,提问作者NoviceDeveloper
相关产品推荐
相关产品推荐

