初始化 monorepo: Go后端(7微服务) + Unity客户端(9模块) + 启动器 HTML5原型: Three.js 3D体素世界, Perlin噪声地形, 原版材质, 22种方块 Minecraft创造模式背包: 双栏布局, 拖拽移动物品, 方向性元件引脚 AI助搭策划文档 + 客户端/服务端骨架 + Docker Compose + CI
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace PCL.Core.Logging;
|
||||
|
||||
public static class LoggerExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// 创建 ILogger 实例
|
||||
/// </summary>
|
||||
/// <param name="logger">现有的 Logger 实例</param>
|
||||
/// <param name="categoryName">日志类别名称</param>
|
||||
/// <returns>ILogger 实例</returns>
|
||||
public static ILogger CreateLogger(this Logger logger, string categoryName)
|
||||
{
|
||||
return new LoggerAdapter(logger, categoryName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建 ILogger 工厂
|
||||
/// </summary>
|
||||
/// <param name="logger">现有的 Logger 实例</param>
|
||||
/// <returns>ILoggerFactory 实例</returns>
|
||||
public static ILoggerFactory CreateLoggerFactory(this Logger logger)
|
||||
{
|
||||
return new LoggerFactoryAdapter(logger);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 使用结构化日志记录的扩展方法
|
||||
/// </summary>
|
||||
public static void LogInformation<T0>(this ILogger logger, string message, T0 arg0)
|
||||
{
|
||||
logger.Log(Microsoft.Extensions.Logging.LogLevel.Information, message, arg0);
|
||||
}
|
||||
|
||||
public static void LogInformation<T0, T1>(this ILogger logger, string message, T0 arg0, T1 arg1)
|
||||
{
|
||||
logger.Log(Microsoft.Extensions.Logging.LogLevel.Information, message, arg0, arg1);
|
||||
}
|
||||
|
||||
public static void LogInformation<T0, T1, T2>(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<T0>(this ILogger logger, string message, T0 arg0)
|
||||
{
|
||||
logger.Log(Microsoft.Extensions.Logging.LogLevel.Warning, message, arg0);
|
||||
}
|
||||
|
||||
public static void LogWarning<T0, T1>(this ILogger logger, string message, T0 arg0, T1 arg1)
|
||||
{
|
||||
logger.Log(Microsoft.Extensions.Logging.LogLevel.Warning, message, arg0, arg1);
|
||||
}
|
||||
|
||||
public static void LogError<T0>(this ILogger logger, Exception? exception, string message, T0 arg0)
|
||||
{
|
||||
logger.Log(Microsoft.Extensions.Logging.LogLevel.Error, exception, message, arg0);
|
||||
}
|
||||
|
||||
public static void LogError<T0, T1>(this ILogger logger, Exception? exception, string message, T0 arg0, T1 arg1)
|
||||
{
|
||||
logger.Log(Microsoft.Extensions.Logging.LogLevel.Error, exception, message, arg0, arg1);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 条件日志记录扩展方法
|
||||
/// </summary>
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 性能计时日志记录
|
||||
/// </summary>
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user