ASP.NET Core - Serilog 默认为记录器

ASP.NET Core - Serilog in default the logger

我想在我的 ASP.NET 核心应用程序中使用 Serilog 来记录到一个文件。我已经安装了包 Serilog.AspNetCore(它依赖于 Serilog.Settings.ConfigurationSerilog.Sinks.File,所以我想我不需要任何其他包)。

我的目标是像这样在我的控制器中实现登录:

...
private ILogger _log;
public MyController(ILogger<MyController> logger)
{
   _log = logger;
}
...

public ActionResult<MyResponse> Foo([FromRoute] Guid fooGuid)
{
   _log.LogError("error test");
}

在我的appsettings.json中我有这样的配置:

"Serilog": {
    "Using": [],
    "MinimumLevel": "Information",
    "WriteTo": [
      { "Name": "Console" },
      {
        "Name": "File",
        "Args": {
          "patch": "D:\Log\log.log"
        }
      }
    ],
    "Application": "Centralized logging application"
  },
  "AllowedHosts": "*"

我的 Program.cs 看起来像这样:

  public static void Main(string[] args)
    {
      CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
          .ConfigureLogging((context, logging) =>
          {
            logging.ClearProviders();
            logging.AddSerilog().AddConfiguration(context.Configuration);
          })
          .ConfigureWebHostDefaults(webBuilder =>
          {
            webBuilder.UseStartup<Startup>();
          });

我认为问题出在 Program.cs 文件中。如何实现这种登录到文件的最简单方法是什么?谢谢。

  1. 您的 appsettings.json 有错字。它应该说明 "path": "D:\Log\log.log"
  2. 您的 CreateHostBuilder 方法应包括:

    Host.CreateDefaultBuilder(args)
    .UseSerilog()
    
  3. 您的 Main 方法应包括

    // reading from appsettings.json the logging settings
    var configuration = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json")
        .Build();
    Log.Logger = new LoggerConfiguration()
        .ReadFrom.Configuration(configuration)
        .CreateLogger();