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

时间:2020-01-23 10:02:05

标签: c# asp.net asp.net-core .net-core serilog

我想在我的ASP.NET Core应用程序中使用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 个答案:

答案 0 :(得分:1)

  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();