C# Serilog将日志记录到控制台,但不记录到文件或数据库

C# 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":

我正在使用ASP.NET核心创建一个web 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中的代码一样。我把它拿了出来,现在正对着文件

不过,我在让它与数据库一起工作时仍然遇到一些问题。我将其添加到示例代码中。为了安全起见,我用示例值替换了连接字符串中的一些值。我知道连接字符串是好的,因为数据库表是创建的

编辑 我终于成功了。我的代码确实有点小问题。我认为我应该在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,否则你不能保证消息会成功,这听起来像是你的空文件在为你提供帮助。我计划明天试一试。