为什么 Serilog 不写入 ASP.Net core 应用程序中的日志文件?

Ale*_*exu 4 serilog asp.net-core

我正在尝试在 ASP.Net Core 应用程序中使用 Serilog,但无法让它工作。一旦我在 Program.cs 中添加 .UseSerilog(),通常进入控制台屏幕的消息就会消失,并且不会创建任何日志文件。以下是我启用 Serilog 的方法:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
    .UseSerilog()
    .ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.UseStartup<Startup>();
    })
Run Code Online (Sandbox Code Playgroud)

这是我的应用程序设置:

  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Grpc": "Information",
      "Microsoft": "Information",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
Run Code Online (Sandbox Code Playgroud)

据我所知,默认情况下,日志文件似乎会被写入 VS.net 项目下的“logs”文件夹中(至少从我查看的示例来看是这样)。我想念什么?

小智 10

配置日志记录到文件

\n

在 ASP.NET Core 中配置 Serilog,更改 Serilog 设置块中的 appsettings.json 文件以包含另一个接收器(文件),该文件将创建一个具有文件接收器的 Serilog 记录器,用于写入日志详细信息 document\xef\xbc\x9a

\n
 "AllowedHosts": "*",\n\n  "Serilog": {\n    "MinimumLevel": "Information",\n    "Override": {\n      "Microsoft.AspNetCore": "Warning"\n    },\n    "WriteTo": [\n      {\n        "Name": "Console "\n      },\n      {\n        "Name": "File",\n        "Args": {\n          "path": "Serilogs\\\\AppLogs.log",\n          "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"\n        }\n      }\n    ]\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

如上所示,文件接收器需要一个参数,在该参数中我们需要指定日志文件名和文件路径。该路径可以是绝对路径或相对路径。这里,我指定了一个相对路径,这将在应用程序文件夹中创建一个文件夹 serilogs 并写入该文件夹中的 AppLogs.log 文件。

\n

然后在startup.cs中添加代码,在构造函数中读取这些Serilog设置,如下所示\xef\xbc\x9a

\n
 public Startup(IConfiguration configuration)\n        {\n            Configuration = configuration;\n\n            Log.Logger = new LoggerConfiguration()\n        .ReadFrom.Configuration(configuration)\n        .CreateLogger();\n        }\n
Run Code Online (Sandbox Code Playgroud)\n

然后更改program.cs中的代码,指定Host Builder在ASP.NET Core中使用Serilog而不是默认的logger\xef\xbc\x9a

\n
 public static IHostBuilder CreateHostBuilder(string[] args) =>\n            Host.CreateDefaultBuilder(args)\n\n            .UseSerilog()\n                .ConfigureWebHostDefaults(webBuilder =>\n                {\n                    webBuilder.UseStartup<Startup>();\n                });\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

然后运行项目,生成日志记录:

\n

在此输入图像描述

\n

在此输入图像描述

\n

具体参考文档:

\n

https://procodeguide.com/programming/aspnet-core-logging-with-serilog/

\n