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.AspNetCore 版本 2.1.1
- Serilog.Settings.Configuration 版本 3.1.0
- Serilog.Sinks.File 版本 4.0.0
- Serilog.Sinks.MSSqlServer 版本 5.1.2
检查生产服务器的权限并确保连接的用户具有适当的权限。
此外,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"
}
我是 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.AspNetCore 版本 2.1.1
- Serilog.Settings.Configuration 版本 3.1.0
- Serilog.Sinks.File 版本 4.0.0
- Serilog.Sinks.MSSqlServer 版本 5.1.2
检查生产服务器的权限并确保连接的用户具有适当的权限。
此外,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"
}