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

NLog配置allowDbNull=true时仅记录Error不记录Info日志问题

问题原因

出现该现象是两个因素共同导致:

  1. 4.7.14之前版本的NLog Database Target存在已知bug:当日志事件没有携带异常对象(即Info、Warn这类无异常的日志级别)时,如果参数配置了allowDbNull="true",空值转DBNull的流程会触发内部参数校验异常,直接导致整条日志被丢弃,不会写入数据库/文件。
  2. 未配置allowDbNull时,NLog默认会把layout渲染出的空字符串直接传给数据库参数,不会转成DBNull,因此无异常的日志会把异常相关字段写成空字符串。
解决步骤
  • 先将项目引用的NLog和NLog.Database包升级到4.7.14及以上的稳定版本,修复上述空值处理的内部bug。
  • 修改数据库目标的参数配置,给所有异常相关字段同时加上allowDbNull="true"和emptyAsNull="true"属性,显式指定字段DbType,避免类型推断错误。
  • 开启NLog内部日志做校验,将NLog根节点配置加上internalLogLevel="Trace" internalLogFile="nlog-internal.log",如果后续还有日志写入失败的问题,可以直接在内部日志里定位到具体报错原因。
正确配置参考
<target name="dbTarget" xsi:type="Database" connectionString="你的数据库连接串" commandText="你的日志插入SQL语句">
  <parameter name="@EventDateTime" layout="${date}" dbtype="DateTime" />
  <parameter name="@EventLevel" layout="${level}" dbType="String" />
  <parameter name="@UserName" layout="${environment-user}" dbType="String" />
  <parameter name="@MachineName" layout="${machinename}" dbType="String" />
  <parameter name="@EventMessage" layout="${message}" dbType="String" />
  <parameter name="@ErrorMessage" layout="${exception:format=message}" dbType="String" allowDbNull="true" emptyAsNull="true" />
  <parameter name="@ErrorType" layout="${exception:format=type}" dbType="String" allowDbNull="true" emptyAsNull="true" />
  <parameter name="@ErrorSource" layout="${exception:format=source}" dbType="String" allowDbNull="true" emptyAsNull="true" />
  <parameter name="@ErrorStackTrace" layout="${exception:format=stacktrace}" dbType="String" allowDbNull="true" emptyAsNull="true" />
  <parameter name="@InnerErrorMessage" layout="${exception:format=type,message,method,source,stacktrace:maxInnerExceptionLevel=5:innerFormat=shortType,message,method,source,stacktrace}" dbType="String" allowDbNull="true" emptyAsNull="true" />
</target>

配置完成后即可实现预期效果:Error级带异常的日志会正常写入所有异常字段内容,Info、Warn等无异常的日志不会丢失,无值的异常相关字段会写入数据库null值,而非空字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:54:33