在现代 C# 应用开发中,日志记录是不可或缺的一环。它不仅帮助开发者追踪错误、监控应用状态,还能用于性能分析和安全审计。.NET 提供了强大的日志抽象接口(如 ILogger 和 ILoggerProvider),允许我们轻松集成第三方日志框架或实现自己的 C#日志提供程序。本文将手把手教你如何从零开始构建一个自定义日志实现,即使你是编程新手也能轻松上手。
虽然 .NET 内置了 Console、Debug 等日志提供程序,但在实际项目中,你可能希望:
这时,通过实现 ILoggerProvider 接口,你可以完全控制日志的输出方式,这就是 .NET日志扩展 的强大之处。
首先,我们需要一个具体的日志记录器类,它实现了 ILogger 接口:
using Microsoft.Extensions.Logging;using System;public class CustomLogger : ILogger{ private readonly string _categoryName; public CustomLogger(string categoryName) { _categoryName = categoryName; } public IDisposable BeginScope<TState>(TState state) => null; public bool IsEnabled(LogLevel logLevel) { // 这里可以加入自定义逻辑,比如只记录 Warning 及以上级别 return logLevel >= LogLevel.Warning; } public void Log<TState>( LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter) { if (!IsEnabled(logLevel)) return; var message = formatter(state, exception); var logEntry = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] [{logLevel}] {_categoryName}: {message}"; // 示例:写入控制台(你也可以改为写入文件、数据库等) Console.WriteLine(logEntry); // 如果有异常,也输出异常信息 if (exception != null) Console.WriteLine(exception.ToString()); }} 接下来,创建一个提供程序类,负责创建 CustomLogger 实例:
using Microsoft.Extensions.Logging;using System.Collections.Concurrent;public class CustomLoggerProvider : ILoggerProvider{ private readonly ConcurrentDictionary<string, CustomLogger> _loggers = new ConcurrentDictionary<string, CustomLogger>(); public ILogger CreateLogger(string categoryName) { return _loggers.GetOrAdd(categoryName, name => new CustomLogger(name)); } public void Dispose() { _loggers.Clear(); }} 在 Program.cs 中,使用 AddLogging 方法添加你的提供程序:
var builder = WebApplication.CreateBuilder(args);// 添加自定义日志提供程序builder.Logging.AddProvider(new CustomLoggerProvider());// 其他服务配置...var app = builder.Build();// 在控制器或服务中注入 ILogger 使用app.MapGet("/", (ILogger<Program> logger) =>{ logger.LogInformation("这是一个信息日志。"); logger.LogWarning("这是一个警告日志。"); return "Hello World!";});app.Run(); 为了使你的 ILoggerProvider教程 更加实用,可以结合 IOptions 模式,让用户提供配置(如日志文件路径、最小日志级别等)。这需要额外实现 ConfigureOptions 并使用工厂模式,但核心思路不变。
通过本文,你已经掌握了如何在 C# 中实现一个完整的 自定义日志实现。无论是用于学习还是生产环境,这种能力都能让你更灵活地控制应用程序的日志行为。记住,良好的日志设计不仅能提升调试效率,还能为系统稳定性保驾护航。
关键词回顾:C#日志提供程序、自定义日志实现、.NET日志扩展、ILoggerProvider教程。
本文由主机测评网于2025-12-17发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025128905.html