Serilog 记录到控制台,但不记录到文件或数据库
Serilog logs to console, but not to file or database
我正在创建一个带有 ASP.NET 核心的网络 API,但我在让 Serilog 工作时遇到了一些问题。它会很好地输出到控制台。但是,当我告诉它输出到一个文件时,它会创建一个文件,但不会向其中输入任何日志。当我尝试使用 PostgreSQL 数据库时,也会发生同样的情况。有什么问题吗?
appsettings.json
{
"AllowedHosts": "*",
"Serilog": {
"MinimumLevel": "Information",
"Using": [ "Serilog.Sinks.PostgreSQL" ],
"WriteTo": [
{
"Name": "Console"
},
{
"Name": "File",
"Args": {
"path": "Serilogs\AppLogs.log"
}
},
{
"Name": "PostgreSQL",
"Args": {
"connectionString": "Server=fake_server;Port=5432;Database=filter_endpoints;User Id=postgres;Password=fake_password;",
"tableName": "Logs",
"needAutoCreateTable": true
}
}
]
},
Startup.cs
public Startup(IConfiguration configuration)
{
var configurationBuilder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddJsonFile("appsettings.Development.json")
.AddEnvironmentVariables();
Log.Logger = new LoggerConfiguration().
Enrich.FromLogContext().
ReadFrom.Configuration(configuration).
CreateLogger();
Configuration = configurationBuilder.Build();
}
编辑
我让它与文件一起工作。显然,我有第二个配置代码块,就像 Program.cs 中 Startup.cs 中的代码一样。我把它拿出来了,现在正在对档
尽管如此,我仍然无法让它与数据库一起工作。我将其添加到示例代码中。为了安全起见,我用样本值替换了连接字符串中的一些值。自创建数据库 table 以来,我知道连接字符串是好的。
编辑
我终于让这个工作了。我的代码确实有一个小问题。我相信我应该在邮件 PostgreSQL 包之上使用 Serilog.Syncs.PostgrSQL.Configuration 包。我不确定这是否是一个贡献因素。
主要问题是由于某种原因,同步无法与最新版本的 NpgSQL 一起使用(我在 Github 同步问题中发现了这一点)。我暂时降级了 NpgSQL。希望他们能尽快解决这个问题。
感谢所有试图帮助我的人。
你试过告诉 Serilog 它应该使用哪个接收器吗? :-)
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
来自 Serilog 文档:https://github.com/serilog/serilog-settings-configuration#serilogsettingsconfiguration--
我终于让它工作了。我的代码确实有一个小问题。我相信我应该在邮件 PostgreSQL 包之上使用 Serilog.Syncs.PostgrSQL.Configuration 包。我不确定这是否是一个贡献因素。
主要问题是出于某种原因,同步无法与最新版本的 NpgSQL 一起使用(我在 Github 同步问题中发现了这一点)。我暂时降级了 NpgSQL。希望他们能尽快解决这个问题。
我正在创建一个带有 ASP.NET 核心的网络 API,但我在让 Serilog 工作时遇到了一些问题。它会很好地输出到控制台。但是,当我告诉它输出到一个文件时,它会创建一个文件,但不会向其中输入任何日志。当我尝试使用 PostgreSQL 数据库时,也会发生同样的情况。有什么问题吗?
appsettings.json
{
"AllowedHosts": "*",
"Serilog": {
"MinimumLevel": "Information",
"Using": [ "Serilog.Sinks.PostgreSQL" ],
"WriteTo": [
{
"Name": "Console"
},
{
"Name": "File",
"Args": {
"path": "Serilogs\AppLogs.log"
}
},
{
"Name": "PostgreSQL",
"Args": {
"connectionString": "Server=fake_server;Port=5432;Database=filter_endpoints;User Id=postgres;Password=fake_password;",
"tableName": "Logs",
"needAutoCreateTable": true
}
}
]
},
Startup.cs
public Startup(IConfiguration configuration)
{
var configurationBuilder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddJsonFile("appsettings.Development.json")
.AddEnvironmentVariables();
Log.Logger = new LoggerConfiguration().
Enrich.FromLogContext().
ReadFrom.Configuration(configuration).
CreateLogger();
Configuration = configurationBuilder.Build();
}
编辑 我让它与文件一起工作。显然,我有第二个配置代码块,就像 Program.cs 中 Startup.cs 中的代码一样。我把它拿出来了,现在正在对档
尽管如此,我仍然无法让它与数据库一起工作。我将其添加到示例代码中。为了安全起见,我用样本值替换了连接字符串中的一些值。自创建数据库 table 以来,我知道连接字符串是好的。
编辑 我终于让这个工作了。我的代码确实有一个小问题。我相信我应该在邮件 PostgreSQL 包之上使用 Serilog.Syncs.PostgrSQL.Configuration 包。我不确定这是否是一个贡献因素。
主要问题是由于某种原因,同步无法与最新版本的 NpgSQL 一起使用(我在 Github 同步问题中发现了这一点)。我暂时降级了 NpgSQL。希望他们能尽快解决这个问题。
感谢所有试图帮助我的人。
你试过告诉 Serilog 它应该使用哪个接收器吗? :-)
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
来自 Serilog 文档:https://github.com/serilog/serilog-settings-configuration#serilogsettingsconfiguration--
我终于让它工作了。我的代码确实有一个小问题。我相信我应该在邮件 PostgreSQL 包之上使用 Serilog.Syncs.PostgrSQL.Configuration 包。我不确定这是否是一个贡献因素。
主要问题是出于某种原因,同步无法与最新版本的 NpgSQL 一起使用(我在 Github 同步问题中发现了这一点)。我暂时降级了 NpgSQL。希望他们能尽快解决这个问题。