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

.NET 5 Web API配置Serilog写入SQL Server日志失败排查

Serilog 写入数据库Log表无数据排查项
  • 检查应用启动初始化逻辑:必须在Main方法最顶部、创建Host之前完成Serilog全局实例初始化,且应用退出时必须调用Log.CloseAndFlush()强制刷新缓冲区日志,否则进程退出时缓冲区里未写入的日志会直接丢失。标准初始化代码结构如下:
public static void Main(string[] args)
{
    // 提前加载配置文件
    var config = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json")
        .Build();
    Log.Logger = new LoggerConfiguration()
        .ReadFrom.Configuration(config)
        .CreateLogger();
    try
    {
        CreateHostBuilder(args).Build().Run();
    }
    catch (Exception ex)
    {
        Log.Fatal(ex, "应用启动异常终止");
    }
    finally
    {
        // 这行必须加,否则日志可能滞留在缓冲区不写入
        Log.CloseAndFlush();
    }
}
  • 检查NuGet包引用完整性:根据你使用的数据库安装对应依赖,核心包不能缺:
    • 基础依赖:Serilog.AspNetCore、Serilog.Settings.Configuration
    • 数据库Sink:SQLServer装Serilog.Sinks.MSSqlServer,PostgreSQL装Serilog.Sinks.PostgreSQL,MySQL装Serilog.Sinks.MySQL
  • 检查配置文件格式与有效性:
    • Serilog配置节点必须放在appsettings.json根层级,不能嵌套在其他配置节点下
    • 配置的日志最低级别不能高于你实际写入的日志级别,比如要写入Information级别日志,MinimumLevel不能设置为Warning/Error/Fatal
    • 连接字符串必须有目标数据库的写权限,可以单独用数据库客户端拿该连接串测试连通性和表写入权限,自定义表名的话要和实际数据库中的Log表名完全一致
      参考配置示例:
{
  "Serilog": {
    "MinimumLevel": "Information",
    "WriteTo": [
      {
        "Name": "MSSqlServer",
        "Args": {
          "connectionString": "你的数据库连接字符串",
          "tableName": "Logs",
          "autoCreateSqlTable": false
        }
      }
    ],
    "Override": {
      "Microsoft": "Warning",
      "System": "Warning"
    }
  }
}
  • 检查日志过滤规则:如果配置了Override节点的命名空间级别过滤,确认你写日志的类所在命名空间没有被设置过高的日志过滤级别,否则对应命名空间下的低级别日志会被直接丢弃。
  • 开启Serilog自诊断定位隐藏错误:Serilog默认会吞掉Sink写入过程中的异常,不会直接抛出,你可以在初始化Logger之前开启SelfLog,输出Sink内部的报错信息定位具体问题:
// 把自诊断日志输出到调试输出窗口
Serilog.Debugging.SelfLog.Enable(msg => System.Diagnostics.Debug.WriteLine(msg));
// 部署环境可以输出到控制台错误流或者指定本地文件

部署场景额外注意:如果是IIS部署,要确认应用程序池对应的运行身份有目标数据库的写入权限;如果是容器部署,要确认容器能正常连通数据库端口,没有被网络策略拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:27:22