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

ASP.NET Core 5.0环境下NLog异常日志无法写入数据库问题求助

问题排查步骤

1. 修正日志记录调用语法

你当前的LogError调用参数顺序错误,无法正确传入异常信息,也不符合ILogger的重载规则:
原错误写法:

this._logger.LogError($"---- Token Error ----", ex.Message);

正确写法(需要将异常对象作为第一个参数传入,才能让NLog捕获完整异常信息,同时匹配日志规则):

this._logger.LogError(ex, "---- Token Error ----");

2. 清理Program.cs中的重复NLog注册

ASP.NET Core 5.0中NLog的注册不需要同时调用UseNLog()和AddNLog(),重复注册会导致配置加载冲突,修改为如下写法即可:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureLogging((hostingContext, logging) =>
        {
            logging.ClearProviders();
            logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
            logging.SetMinimumLevel(LogLevel.Error);
        })
        .UseNLog() // 仅保留此处的NLog注册即可
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

3. 验证NLog.config配置正确性

  • 确保NLog.config文件的属性设置为复制到输出目录:如果较新则复制,否则发布/运行时会加载不到更新后的配置
  • 检查配置中数据库连接字符串是否正确读取了appsettings.json的节点,连接字符串示例:
<variable name="DbConnectionString" 
          value="Server=${configsetting:name=NLogConnection.DbHost};Database=${configsetting:name=NLogConnection.Database};User Id=${configsetting:name=NLogConnection.User};Password=${configsetting:name=NLogConnection.Password};" />
  • 检查日志规则是否配置了Error级别日志写入数据库目标,示例规则:
<logger name="*" minlevel="Error" writeTo="database" />
  • 检查数据库目标的插入语句、字段映射是否和你SQL Server中的日志表结构完全匹配,字段类型、长度不匹配会导致写入失败

4. 开启NLog内部日志定位具体错误

在nlog.config的根节点<nlog>添加内部日志配置,可直接看到数据库写入失败的具体原因(比如连接报错、权限不足、表结构不匹配等):

<nlog internalLogLevel="Debug" internalLogFile="c:\temp\nlog-internal.log" >
<!-- 原有配置内容 -->
</nlog>

触发异常后查看c:\temp\nlog-internal.log的内容,即可定位具体的写入错误。

5. 验证数据库权限

确认你配置的数据库账号拥有对应日志表的INSERT权限,同时远程服务器允许你的应用服务器IP访问SQL Server的1433端口。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:48:01