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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:01:28