Serilog 不记录信息日志

Nig*_*lis 5 c# serilog asp.net-core asp.net-core-2.1

在我的 .NET Core 2.1 项目中,我安装了Serilog,但由于某种原因它不会记录信息事件。但它会记录错误事件。

在我的应用程序设置中,我有:

    "Serilog": {
        "MinimumLevel": {
          "Default": "Information",
          "Override": {
            "Microsoft": "Fatal",
            "System": "Fatal"
          }
        },
        "WriteTo": [
          {
            "Name": "File",
            "Args": {
              "restrictedToMinimumLevel": "Information",
              "path": "D:\\Web\\098_VDSNet4\\Logs\\API.AdminPortal\\.txt",
              "rollingInterval": "Day"
            }
          }
        ]
      }
Run Code Online (Sandbox Code Playgroud)

在我的 Startup.cs 中我有:

                Log.Logger = new LoggerConfiguration()
                    .MinimumLevel.Verbose()
                    .ReadFrom.Configuration(Configuration)
                    .CreateLogger();

                services.AddLogging(logging =>
                    logging.AddSerilog(dispose: true)
                );
Run Code Online (Sandbox Code Playgroud)

在我的代码中有:

            public IActionResult Post(Address address)
            {
                string functionName = "AddressController:Post";

                try
                {
                    logger.LogInformation($"{functionName}");

                    // TOOD Additional Address validation
                    addressRepository.Add(address);
                    addressRepository.Save();

                    return Ok(address);
                }
                catch(Exception ex)
                {
                    logger.LogError(ex, $"{functionName}: There was an error creating the address");
                    return BadRequest();
                }

            }
Run Code Online (Sandbox Code Playgroud)

logger.LogInformation(我logger.LogDebug也尝试过,但这也不起作用)不输出任何内容。但logger.LogError确实记录了正确的错误。

我尝试将默认级别更改为详细,看看这是否会使其生效,但我似乎无法将错误以下的任何内容输出到日志文件中。

Mse*_*Ali 5

您必须将ILogger<HomeController>接口注入到构造函数中HomeController

    private readonly Microsoft.Extensions.Logging.ILogger _log;

    public HomeController(ILogger<HomeController> logger)
    {
        _log = logger;
    }
Run Code Online (Sandbox Code Playgroud)

您必须告诉asp.net core从哪里读取配置(将其添加到Program.cs):

public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true)
            .Build();
Run Code Online (Sandbox Code Playgroud)

在 Program.cs 中添加UseSerilog

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseSerilog();
Run Code Online (Sandbox Code Playgroud)

结果:

错误和信息的结果

  • 它从程序类记录正常。但在我的控制器中它没有记录 (3认同)