Files
xyou f70b061d1a
CI / Go Backend (push) Canceled after 0s
feat: 项目初始化 + 3D方块世界原型 + AI助搭系统
初始化 monorepo: Go后端(7微服务) + Unity客户端(9模块) + 启动器

HTML5原型: Three.js 3D体素世界, Perlin噪声地形, 原版材质, 22种方块

Minecraft创造模式背包: 双栏布局, 拖拽移动物品, 方向性元件引脚

AI助搭策划文档 + 客户端/服务端骨架 + Docker Compose + CI
2026-08-08 14:07:56 +08:00

107 lines
3.6 KiB
C#

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);
}
}
}