C# Serilog将日志记录到控制台,但不记录到文件或数据库
我正在使用ASP.NET核心创建一个web API,但在让Serilog正常工作时遇到了一些问题。它将输出到控制台。但是,当我告诉它输出到文件时,它将创建一个文件,但不会在其中输入任何日志。当我尝试使用PostgreSQL数据库时也会发生同样的情况。有什么问题吗 appsettings.jsonC# Serilog将日志记录到控制台,但不记录到文件或数据库,c#,postgresql,asp.net-core,asp.net-core-webapi,serilog,C#,Postgresql,Asp.net Core,Asp.net Core Webapi,Serilog,我正在使用ASP.NET核心创建一个web API,但在让Serilog正常工作时遇到了一些问题。它将输出到控制台。但是,当我告诉它输出到文件时,它将创建一个文件,但不会在其中输入任何日志。当我尝试使用PostgreSQL数据库时也会发生同样的情况。有什么问题吗 appsettings.json { "AllowedHosts": "*", "Serilog": { "MinimumLevel":
{
"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中的代码一样。我把它拿了出来,现在正对着文件
不过,我在让它与数据库一起工作时仍然遇到一些问题。我将其添加到示例代码中。为了安全起见,我用示例值替换了连接字符串中的一些值。我知道连接字符串是好的,因为数据库表是创建的
编辑
我终于成功了。我的代码确实有点小问题。我认为我应该在mail PostgreSQL包之上使用Serilog.Syncs.PostgrSQL.Configuration包。我不确定这是否是一个贡献因素
主要的问题是,出于某种原因,同步无法与最新版本的NpgSQL一起工作(我在Github的同步问题中发现了这一点)。我暂时降级了NpgSQL。希望他们能尽快修复
感谢所有试图帮助我的人。你有没有告诉Serilog它应该使用哪个水槽?:-)
“使用”:[“Serilog.Sinks.Console”,“Serilog.Sinks.File”],
从Serilog文档中:我终于实现了这一点。我的代码确实有点小问题。我认为我应该在mail PostgreSQL包之上使用Serilog.Syncs.PostgrSQL.Configuration包。我不确定这是否是一个贡献因素
主要的问题是,出于某种原因,同步无法与最新版本的NpgSQL一起工作(我在Github的同步问题中发现了这一点)。我暂时降级了NpgSQL。希望他们能很快解决这个问题。我没有在控制台或文件同步中这样做,但我在数据库中这样做了。由于某种原因,控制台工作了,而数据库没有,所以我认为这不是问题所在。如果Serilog能够在正确的位置找到合适的DLL,它有时会正确地检测接收器。但并非总是如此。官方指南是在从配置中读取时始终包含Using属性。这是否回答了您的问题?请参阅链接。你这样做是错误的文件编写工作,所以我怀疑这是问题所在,但我猜这是可能的。我仍然认为你使用它是错误的。您应该添加Serilog托管项目,并确保添加ILogger服务。此外,您还没有显示AppSettings.development.json文件。您可能正在覆盖其中的值。哦,而且,既然你做错了,你需要强制调用Log.CloseAndFlush,否则你不能保证消息会成功,这听起来像是你的空文件在为你提供帮助。我计划明天试一试。