游戏一到测试阶段,就想获取游戏测试的报错日志,因为玩家基数大,一个开发团队不可能测试到方方面面,所以收集客户端报错日志就是必须的,有用过腾讯的bugly,官方文档写的云里雾里的,有Unity插件导入,还有安卓工程导入,都没说是两边都需要导入还是怎样,要靠猜,太累。接好后发现只能获取java层的报错,没系统学过,表示压力巨大。
只好自己写一个来收集报错日志,利用Unity自身的Application.logMessageReceived方法来实现,代码很简单,就是拼接自己想要的报错日志上传。也加了个接口,可以通过lua热更实现关闭上传。
public static void SetIsOpenCollcetLog(bool bIsCollcetLog)
{
LogCollection.bIsCollcetLog = bIsCollcetLog;
}
/// <summary>
/// 初始化
/// </summary>
/// <param name="postUrl">上传url</param>
/// <param name="bIsPostServer">是否上传</param>
public static void Initialize(bool bIsShowStackTrace = true)
{
LogCollection.bIsCollcetLog = true;
LogCollection.bIsShowStackTrace = bIsShowStackTrace;
Application.logMessageReceived += HandleMessage;
LogCollection.logFilePath = Application.persistentDataPath + "/log.txt";
}
private static void HandleMessage(string logString, string logStackTrace, LogType logType)
{
if (!LogCollection.bIsCollcetLog) return;
if (string.IsNullOrEmpty(logString) && string.IsNullOrEmpty(logStackTrace)) return;
if (lastLogString.Equals(logString) && lastLogStackTrace.Equals(logStackTrace) && lastLogType == logType) return;
lastLogString = logString;
lastLogStackTrace = logStackTrace;
lastLogType = logType;
switch (logType)
{
case LogType.Assert:
tempLog = string.Format("Assert: {0}\nstack trace: {1}", logString, LogCollection.bIsShowStackTrace ? logStackTrace : string.Empty);