【问题标题】:Serilog not logging information logsSerilog 不记录信息日志
【发布时间】:2019-07-26 10:41:36
【问题描述】:

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

在我的 appSettings 我有:

    "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"
            }
          }
        ]
      }

在我的 Startup.cs 中有:

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

                services.AddLogging(logging =>
                    logging.AddSerilog(dispose: true)
                );

在我的代码中:

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

            }

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

我已尝试将默认级别更改为 Verbose 以查看是否会启动它,但我似乎无法将任何低于 Error 的内容输出到日志文件。

【问题讨论】:

  • 是的,在控制器 ctor 我有 ILogger 记录器
  • 您是否有第二个.json 文件,例如appSettings.Development.jsonappSettings.Production.json,这是覆盖最低级别?
  • 另外,我看到你正在使用AddSerilog() - 这已被UseSerilog() 取代,这避免了 Serilog 和默认记录器实现之间的尴尬交互;所有细节都在:nblumhardt.com/2017/08/use-serilog - HTH

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


【解决方案1】:

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

    private readonly Microsoft.Extensions.Logging.ILogger _log;

    public HomeController(ILogger<HomeController> logger)
    {
        _log = logger;
    }

你必须告诉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();

在 Program.cs 添加UseSerilog:

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

结果:

【讨论】:

  • 程序类记录正常。但在我的控制器中它没有记录
【解决方案2】:

通过构造函数将你的日志注入到你的控制器中以便使用它。

using Serilog;

public class MyController : Controller
{
    private readonly ILogger _log;

    public MyController(ILogger log)
    {            
        _log = log;
    }

    public IActionResult Post(Address address)
    {
        //Make sure you are using the variable you set up in this controller
        _log.Information**("Hello World!");
    }
}

【讨论】:

  • 正如我在上面评论的那样,问题是没有让日志记录工作。问题是试图让信息级日志记录工作。记录错误,但不记录信息。
  • json 中的覆盖将阻止记录大量信息。还尝试将默认级别设置为调试。
  • 我尝试将级别设置为调试和详细,但只有错误被写入日志文件。
  • 我遇到了与@NigelEllis 提到的完全相同的问题,有人有解决方案吗? _log.LogError 实际上将日志作为错误写入文件,但我想使用方法 _log.LogInformation() 将日志作为信息写入日志文件...
【解决方案3】:

确保您使用的是在构造函数中分配的控制器中创建的变量。不要使用 Logger.LogInformation。使用 _log.Information。您注入的记录器是您正在配置的记录器。 Logger.LogInformation 使用的是 Microsoft 记录器,而不是您设置的 serlilog。 Serilog 将是 .Information 而不是 .LogInformation。

【讨论】:

  • 当我输入记录器时。在 Visual Studio 2019 中,我没有获得信息选项;智能感知为我提供了 LogInformation、LogDebug 等以及 Log。 (这是 .NET Core 而不是 .NET Framework)
  • 这没有使用 Serilog:私有只读 Microsoft.Extensions.Logging.ILogger _log;
猜你喜欢
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 2022-11-05
  • 2016-04-22
  • 2021-12-15
  • 1970-01-01
  • 2022-09-23
  • 2017-08-28
相关资源
最近更新 更多