using System; using System.Diagnostics; using Microsoft.Extensions.Logging; namespace PCL.Core.Logging; public static class LoggerExtensions { /// /// 创建 ILogger 实例 /// /// 现有的 Logger 实例 /// 日志类别名称 /// ILogger 实例 public static ILogger CreateLogger(this Logger logger, string categoryName) { return new LoggerAdapter(logger, categoryName); } /// /// 创建 ILogger 工厂 /// /// 现有的 Logger 实例 /// ILoggerFactory 实例 public static ILoggerFactory CreateLoggerFactory(this Logger logger) { return new LoggerFactoryAdapter(logger); } /// /// 使用结构化日志记录的扩展方法 /// public static void LogInformation(this ILogger logger, string message, T0 arg0) { logger.Log(Microsoft.Extensions.Logging.LogLevel.Information, message, arg0); } public static void LogInformation(this ILogger logger, string message, T0 arg0, T1 arg1) { logger.Log(Microsoft.Extensions.Logging.LogLevel.Information, message, arg0, arg1); } public static void LogInformation(this ILogger logger, string message, T0 arg0, T1 arg1, T2 arg2) { logger.Log(Microsoft.Extensions.Logging.LogLevel.Information, message, arg0, arg1, arg2); } public static void LogWarning(this ILogger logger, string message, T0 arg0) { logger.Log(Microsoft.Extensions.Logging.LogLevel.Warning, message, arg0); } public static void LogWarning(this ILogger logger, string message, T0 arg0, T1 arg1) { logger.Log(Microsoft.Extensions.Logging.LogLevel.Warning, message, arg0, arg1); } public static void LogError(this ILogger logger, Exception? exception, string message, T0 arg0) { logger.Log(Microsoft.Extensions.Logging.LogLevel.Error, exception, message, arg0); } public static void LogError(this ILogger logger, Exception? exception, string message, T0 arg0, T1 arg1) { logger.Log(Microsoft.Extensions.Logging.LogLevel.Error, exception, message, arg0, arg1); } /// /// 条件日志记录扩展方法 /// public static void LogIf(this ILogger logger, bool condition, Microsoft.Extensions.Logging.LogLevel level, string message) { if (condition) { logger.Log(level, message); } } public static void LogIf(this ILogger logger, bool condition, Microsoft.Extensions.Logging.LogLevel level, Exception? exception, string message) { if (condition) { logger.Log(level, exception, message); } } /// /// 性能计时日志记录 /// public static IDisposable LogPerformance(this ILogger logger, string operationName) { logger.LogInformation("开始执行: {OperationName}", operationName); return new PerformanceLoggerDisposable(logger, operationName); } private class PerformanceLoggerDisposable(ILogger logger, string operationName) : IDisposable { private readonly long _startTime = Stopwatch.GetTimestamp(); public void Dispose() { var elapsed = Stopwatch.GetElapsedTime(_startTime); logger.LogInformation("完成执行: {OperationName}, 耗时: {ElapsedMs}ms", operationName, elapsed.TotalMilliseconds); } } }