Serilog SQL 服务器 - 发布时没有写入日志,在开发中工作正常

Serilog SQL Server - Nothing written to the log when in release, works fine in development

我是 Serilog 的新手,正在尝试将日志记录配置到 SQL 服务器。我的 Program.cs 看起来像这样...

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Serilog;

namespace MyWeb {
  public class Program {
    public static void Main(string[] args) =>
      CreateWebHostBuilder(args).Build().Run();

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
      WebHost.CreateDefaultBuilder(args)
        .UseSerilog((context, config) => {
          config.ReadFrom.Configuration(context.Configuration);
        })
        .UseStartup<Startup>();
  }
}

...appSettings.json 的 Serilog 部分如下所示...

"Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Error",
        "System": "Error"
      }
    },
    "WriteTo": [
      {
        "Name": "MSSqlServer",
        "Args": {
          "connectionString": "myconnstr",
          "tableName": "Logs"
        }
      }
    ]
  },

appSettings.Development.json 中的部分看起来像这样...

  "Serilog": {
    "MinimumLevel": {
      "Default": "Debug",
      "Override": {
        "Microsoft": "Fatal",
        "System": "Fatal"
      }
    },
    "WriteTo": [
      {
        "Name": "Debug"
      },
      {
        "Name": "MSSqlServer",
        "Args": {
          "connectionString": "Data Source=.;Initial Catalog=MyWebDb;Trusted_Connection=True;MultipleActiveResultSets=true",
          "tableName": "Logs"
        }
      }
    ]
  }

我用这个 SQL...

手动创建了 Logs table
CREATE TABLE [Logs] (
   [Id] int IDENTITY(1,1) NOT NULL,
   [Message] nvarchar(max) NULL,
   [MessageTemplate] nvarchar(max) NULL,
   [Level] nvarchar(128) NULL,
   [TimeStamp] datetimeoffset(7) NOT NULL,  
   [Exception] nvarchar(max) NULL,
   [Properties] xml NULL,
   [LogEvent] nvarchar(max) NULL
   CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED ([Id] ASC) 
) 

当我 运行 使用上述设置在 VS 中访问网站时,日志记录工作正常。如果我将 appSettings.Development.json 中的连接字符串更改为生产连接字符串,然后在 VS 中将 运行 更改为 运行,一切似乎都正常,没有报告异常,但没有任何内容写入日志 table生产数据库。

我尝试从 this SO answer, and tried the advice in 复制代码,但结果总是一样。当我使用本地连接字符串时它工作正常,如果我使用生产连接字符串,则不会记录任何内容。

我对 Serilog 使用与网站其余部分相同的连接字符串,并且所有其他数据库访问工作正常,因此看起来不像是权限问题。

有人知道我做错了什么吗?谢谢

我正在使用 ASP.NET Core 2.2 和 Serilog 版本如下...

检查生产服务器的权限并确保连接的用户具有适当的权限。

此外,Serilog 默认不报告日志记录问题。如果要启用诊断,请添加 SelfLog.Enable()

Serilog.Debugging.SelfLog.Enable(msg => Debug.WriteLine(msg));

确保您在数据库中使用 [dbo] 模式。如果您有不同的架构,请像这样更新您的配置:

"Name": "MSSqlServer",
"Args": {
      "connectionString": "Your connection string",
      "schemaName": "your schema name",
      "tableName": "Logs"
 }