Unity日志系统扩展:基于Unity杂货铺项目的日志分级与文件输出
【免费下载链接】Unity3DTraining 【Unity杂货铺】unity大杂烩~ 项目地址: https://gitcode.com/gh_mirrors/un/Unity3DTraining
在Unity开发中,默认的Debug.Log接口虽然简单易用,但在复杂项目中会面临三大痛点:日志无分级导致重要信息被淹没、无法输出到本地文件进行离线分析、缺乏上下文标识难以定位问题。本文基于Unity3DTraining项目的实践经验,提供一套轻量级日志系统扩展方案,实现日志分级、文件输出和上下文增强功能。
日志系统现状分析
项目中大量使用原生Debug接口,如Joystick.cs中的调试代码:
Debug.Log("joystick is forbid!");
Debug.Log("OnPress:" + isPressed.ToString());
这种方式存在明显局限:所有日志均输出到控制台,无法区分错误级别;没有持久化存储,程序崩溃后难以追溯;缺乏调用堆栈和时间戳等关键上下文。
日志分级实现方案
分级接口设计
参考LuaInterface_DebuggerWrap.cs中的ILogger接口设计,实现包含5个级别的日志系统:
public static class LogSystem {
public static void Trace(string message) => Debug.Log($"[TRACE][{Time.time}] {message}");
public static void Info(string message) => Debug.Log($"[INFO][{Time.time}] {message}");
public static void Warn(string message) => Debug.LogWarning($"[WARN][{Time.time}] {message}");
public static void Error(string message) => Debug.LogError($"[ERROR][{Time.time}] {message}");
public static void Fatal(string message) {
Debug.LogError($"[FATAL][{Time.time}] {message}");
// 可在此处添加崩溃处理逻辑
}
}
分级使用示例
改造KnapsackSystem中的日志输出:
// 原代码
Debug.Log("丢弃");
Debug.LogWarning("背包已满!");
// 改造后
LogSystem.Info("丢弃物品:" + itemId);
LogSystem.Warn("背包已满,无法添加:" + itemId);
文件输出模块开发
输出路径配置
结合Unity各平台文件路径规范,选择PersistentDataPath作为日志存储目录:
private static string logPath = Application.persistentDataPath + "/logs/";
日志写入实现
使用C#文件流实现异步写入,避免阻塞主线程:
private static async void WriteToFile(string level, string message) {
if (!Directory.Exists(logPath)) Directory.CreateDirectory(logPath);
string fileName = $"log_{DateTime.Now:yyyyMMdd}.txt";
string logLine = $"[{DateTime.Now:HH:mm:ss}][{level}]{message}\n";
using (StreamWriter writer = new StreamWriter(logPath + fileName, true)) {
await writer.WriteAsync(logLine);
}
}
集成与应用场景
完整日志系统架构
性能优化考量
- 使用对象池复用StringBuilder减少GC:
private static ObjectPool<StringBuilder> sbPool = new ObjectPool<StringBuilder>(
() => new StringBuilder(),
sb => sb.Clear()
);
- 限制日志文件大小,避免存储溢出:
if (new FileInfo(filePath).Length > 10 * 1024 * 1024) { // 10MB上限
// 备份并创建新日志文件
}
项目资源与扩展阅读
- 日志系统源码模板:SomeTest/CodeExporter
- 性能优化参考:Unity性能优化
- 崩溃日志收集:iOS闪退日志的收集和解析
- 命令模式应用:日志记录与撤销
通过这套扩展方案,可显著提升Unity项目的调试效率和问题定位能力。建议在GuideSystem等核心模块优先集成,并根据项目需求扩展日志加密、网络上传等高级功能。
【免费下载链接】Unity3DTraining 【Unity杂货铺】unity大杂烩~ 项目地址: https://gitcode.com/gh_mirrors/un/Unity3DTraining
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



