Application.logMessageReceived += HandleLog;
static void HandleLog(string logString, string stackTrace, LogType type)
{
if (type == LogType.Error || type == LogType.Exception)
{
logCount += 1;
log += logCount + ": ";
log += logString;
log += "\n";
log += stackTrace;
log += "\n";
}
}
经过测试 是可以获得堆栈信息的 无论是异常 还是 普通的log
可以把这些信息直接发给服务器 方便统计
其实还有一个 Application.logMessageReceivedThreaded
如果你输出的特别多 为了不影响主线程的性能 可以使用这个
不过你要自己维护 以确保线程安全
看官方的话是这么说的
无论该消息是否来自主线程,都将触发此事件。
这意味着处理程序代码必须具有线程安全性。
可以从不同的线程调用该代码,也可以并行调用该代码。
确保只有已允许非主线程调用的处理程序才能访问 Unity API。
感觉还是用logMessageReceived更保险一些。
关于日志方面
https://docs.unity3d.com/cn/2022.2/Manual/LogFiles.html
可以看看官方的介绍
看 open editor log 可以看错误的文本文件。
有时候 你希望在手机上看log输出 可以看看下面的插件
这个是收费的,非常强悍。
https://www.stompyrobot.uk/tools/srdebugger/
这个是免费的
https://assetstore.unity.com/packages/tools/integration/log-viewer-12047
git https://github.com/aliessmael/Unity-Logs-Viewer/
可以看到很多年没有更新了 不过没有关系 他依然非常好用
装好插件后 点这个 会在舞台上添加
然后在project setting里设置Reporter优先级为最高
好,运行,在游戏里画个圈就会显示了
他大概长这样
如果你希望 多画几个圈才出现就设置下这个
这个是让相同的日志合并显示的。
设置里可以看到很多有用的信息
还可以设置界面大小,非常方便。
内存不足时的回调 也要记录一下
Application.lowMemory += OnLowMemory;
private void OnLowMemory()
{
Resources.UnloadUnusedAssets();
}