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 中轻松实现全局日志记录。


浙公网安备 33010602011771号