Serilog 未记录到文件

问题描述 投票:0回答:1

我正在尝试在 .NET Core 6 项目中记录有关 API 请求的错误和信息。在我的 Program.cs 文件中进行设置后,它确实将日志条目输出到所需位置。以下是我在 Program.cs 文件中的设置。

        var logger = new LoggerConfiguration()
            .ReadFrom.Configuration(builder.Configuration)
            .Enrich.FromLogContext()
            .CreateLogger();
        builder.Logging.AddSerilog(logger);

        try
        {
            logger.Information("Starting logger");
        }
        catch (Exception ex)
        {
            logger.Error(ex, "Unhandled exception");
        }
        finally
        {
            _ = Log.CloseAndFlushAsync();
        }

        builder.Host.UseSerilog();

这是我的 appsettings.json 文件中的内容。

"Serilog": {
"Using": [ "Serilog.Sinks.Console" ],
"MinimumLevel": "Information",
"WriteTo": [
  {
    "Name": "Console"
  },
  {
    "Name": "File",
    "Args": {
      "path": "E:\\Logs\\MyApplicationLogs\\log.json",
      "rollingInterval": "Day",
      "restrictedToMinimumLevel": "Verbose"
    }
  }
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ]

}

这是我尝试在我的一个控制器中记录信息和错误。当抛出错误时,_logger.LogInformation 或 _logger.LogError 都不会记录信息或错误。

private readonly ILogger<MyController> _logger;

public MyController(ILogger<MyController> logger)
{
    _logger = logger;
}

public void Submit(ILogger<MyController> logger)
{
    _logger.LogInformation("You have submitted an update!");
    try {
        // Do something that causes error
    } catch (Exception ex) {
        _logger.LogError(LogHelper.BuildExceptionMessage(ex, "An error occured loading your form."));
    }
}

我安装了以下 Serilog 软件包:

  • Serilog 版本=“3.1.1”
  • Serilog.AspNetCore 版本=“7.0.0”
  • Serilog.Extensions.Hosting 版本=“7.0.0”

任何关于为什么我的记录器没有在我的控制器中记录信息或错误的反馈将不胜感激。

serilog asp.net-core-6.0 ilogger serilog-aspnetcore
1个回答
0
投票

我正在尝试记录有关 API 请求的错误和信息 我的 .NET Core 6 项目。在我的 Program.cs 文件中设置后 确实将日志条目输出到所需位置

根据您共享的代码片段和描述,我尝试重现您的问题。

根据我的调查,我发现了几个原因导致您的记录器可能无法在控制器中记录信息或错误。

您当前正在使用另一个

ILogger<MyController>
参数定义 Submit 方法。这将创建一个新的记录器本地实例,而不是使用注入的实例。为了使用注入的记录器,请从 Submit 方法中删除参数。

修改您的代码片段如下:

public void Submit()
{
  _logger.LogInformation("You have submitted an update!");
  try {
    // Do something that causes error
  } catch (Exception ex) {
    _logger.LogError(LogHelper.BuildExceptionMessage(ex, "An error occured loading your form."));
  }
}

除了上述修改外,还请确保您有以下配置:

仔细检查您是否在program.cs类文件中的其他配置之后添加了

app.UseSerilogRequestLogging();
中间件引用。

您还可以根据您所需的日志记录粒度,将 appsettings.json 中“文件”接收器的最低级别调整为“信息”或“错误”。

输出:

注意:如果您想了解更多关于登录asp.net core的详细信息,可以查看官方文档

© www.soinside.com 2019 - 2024. All rights reserved.