Skip to content

【Unity3D笔记-002】日志工具

问题场景

  1. 游戏运行中出现异常,但是未崩溃,还能运行,需要查原因。
  2. 游戏崩溃,需要查原因。

Unity3D 接口功能

1.关闭日志

csharp
Debug.logger.logEnabled = false;

2.监听输出日志

csharp
// 添加回调
Application.logMessageReceived += logMsgReceivedFunc;
// 删除回调
Application.logMessageReceived -= logMsgReceivedFunc;
  • 回调函数原型
    csharp
    public void logMsgReceivedFunc(string logValue, string stackTrace, LogType type) {
    }

3.暂停游戏

  • timeScale 调整为0
    csharp
    Time.timeScale = 0f;

日志工具封装

1.替换标准日志

常见问题

  • 常见用法: 使用Debug.Log+号拼接字符串。
  • 产生的问题
    • (1)产生额外的内存分配
    • (2)无法使用统一的方式进行优化处理

优化方案

  • 目标: 替换 Debug.Log 接口的内部实现,使用自定义版本,方便优化和统一管理。
  • 方案: 修改 Debug.logger.logHandler
    • 增加支持 LogFormatLog 方法
csharp

2.崩溃日志上报

  • 目标: 收集应用崩溃时的日志历史
  • 原理: Unity在程序的最外层有异常捕获函数,因此崩溃时也可以捕获到日志。
  • 方案: 将日志写入到文件中,下次应用启动时,从文件中读取崩溃日志,上传到专门的日志服务器。
    • 可以使用本地数据接口PlayerPrefs保存。
csharp

上次更新于: