Net Core Api接口实现全局日志记录

在 .NET Core Web API 项目中,实现全局日志记录是一个常见的需求,可以帮助你跟踪应用程序的执行过程、错误信息、警告以及调试信息。为了实现全局日志记录,可以使用内置的 ILogger 接口配合中间件来实现。

1: 配置日志记录

NET Core 提供了一个非常强大的日志框架,你可以通过在 Program.cs 或 Startup.cs 文件中配置日志记录。通常日志配置会包含多个日志级别(Information、Debug、Error 等)以及不同的输出目标(控制台、文件、数据库等)。

1.1 修改 Program.cs (针对 .NET 6 或更高版本)

在 Program.cs 中配置日志记录:

using Microsoft.Extensions.Logging;

var builder = WebApplication.CreateBuilder(args);

// 配置日志记录(控制台日志、文件日志等)
builder.Logging.ClearProviders();  // 清除默认日志提供者
builder.Logging.AddConsole();      // 输出到控制台
builder.Logging.AddFile("Logs/app-{Date}.log");  // 输出到文件(需要安装 NuGet 包 Serilog 或其他文件日志提供者)

var app = builder.Build();

// 其他配置...

app.Run();

 

 

1.2 修改 Startup.cs(针对较旧的版本)

如果你使用的是 .NET Core 3.1 或更早版本,你需要在 Startup.cs 中配置日志:

public void ConfigureServices(IServiceCollection services)
{
    // 添加日志服务
    services.AddLogging(builder =>
    {
        builder.AddConsole();
        builder.AddFile("Logs/app-{Date}.log");
    });

    // 其他服务...
}
 

2: 创建一个自定义日志中间件

为了全局记录每个请求的信息,你可以创建一个自定义中间件,它将在请求生命周期中记录日志信息

 

using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;
public class RequestLoggingMiddleware
{
    private readonly RequestDelegate _next;
    private readonly ILogger<RequestLoggingMiddleware> _logger;
    public RequestLoggingMiddleware(RequestDelegate next, ILogger<RequestLoggingMiddleware> logger)
    {
        _next = next;
        _logger = logger;
    }
    public async Task InvokeAsync(HttpContext httpContext)
    {
        // 记录请求的基本信息
        _logger.LogInformation("Handling request: {Method} {Url}", httpContext.Request.Method, httpContext.Request.Path);
        await _next(httpContext);
        // 记录响应的状态码
        _logger.LogInformation("Response status code: {StatusCode}", httpContext.Response.StatusCode);
    }
}

 

2.2 注册中间件

然后,在 Program.cs 或 Startup.cs 中注册并启用该中间件:

var app = builder.Build();
// 注册自定义日志中间件
app.UseMiddleware<RequestLoggingMiddleware>();
// 其他中间件和路由配置...
app.MapControllers();
app.Run();

3: 日志记录控制器操作

除了全局日志记录,你可能还想在控制器方法中单独记录日志。在控制器中注入 ILogger,并在操作方法中使用它。

3.1 注入并使用 ILogger 在控制器中记录日志

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
[ApiController]
[Route("api/[controller]")]
public class MyController : ControllerBase
{
    private readonly ILogger<MyController> _logger;
    public MyController(ILogger<MyController> logger)
    {
        _logger = logger;
    }
    [HttpGet]
    public IActionResult Get()
    {
        _logger.LogInformation("Handling GET request for MyController.");
        try
        {
            // 模拟业务逻辑
            throw new InvalidOperationException("An error occurred.");
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "An error occurred while processing the request.");
            return StatusCode(500, "Internal server error");
        }
    }
}

ILogger<MyController> 被注入到控制器中,允许你在操作中记录日志,包括信息日志和错误日志。

 

4: 配置不同的日志级别

 

日志级别允许你控制记录的日志的详细程度,常见的日志级别有:

 

  • Trace:记录最详细的日志信息,通常用于调试。

  • Debug:用于开发和调试阶段,记录详细信息。

  • Information:常规的业务流程日志。

  • Warning:记录警告信息,通常表示有潜在问题。

  • Error:记录错误信息,通常表示程序中的异常。

  • Critical:表示严重错误,可能导致应用崩溃

 

你可以在 Program.cs 中设置日志级别:

builder.Logging.SetMinimumLevel(LogLevel.Information); // 设置最小日志级别为 Information

5: 总结

通过配置 ILogger 接口和自定义中间件,可以在 .NET Core API 中轻松实现全局日志记录。

 

posted @ 2025-06-25 13:29  ck靳  阅读(229)  评论(0)    收藏  举报