从代码获取控制台记录的消息

我想知道是否有任何方法可以从代码中检索运行时在控制台中记录的消息。我正在 Android 上部署一个应用程序,据我所知,控制台只能在开发版本下打印,而我希望它在稳定版本下打印。



繁星淼淼
浏览 98回答 1
1回答

幕布斯7119047

LogCallback您可以使用一个类并添加带有签名的回调方法Application.logMessageReceived和/或Application.logMessageReceivedThreaded并使用初始化类[RuntimeInitializeOnLoadMethod]例如,用于在运行时收集所有日志输出public static class DebugListener{    public static List<LogEntry> logs = new List<LogEntry>();    [RuntimeInitializeOnLoadMethod]    private static void InitializeOnLoad()    {        // removing the callback first makes sure it is only added once        Application.logMessageReceived -= HandleLog;        Application.logMessageReceived += HandleLog;    }    private static void HandleLog(string logString, string stackTrace, LogType type)    {        logs.Add(new LogEntry(logString, stackTrace, type));    }}[Serializable]public class LogEntry{    public string Message;    public string StackTrace;    public LogType Type;    // default constructor is required for serialization    public LogEntry() { }    public LogEntry(string message, string stackTrace, LogType type)    {        Message = message;        StackTrace = stackTrace;        Type = type;    }}当然,您不仅可以将它们收集在列表中,HandleLog还可以使用接收到的日志数据,例如将其添加到组件UI.Text等或者,直接显示文本的最简单解决方案也是使用之前的方法,但在 MonoBehaviour 组件中,并使用和显示OnGUI文本GUI.Labelpublic class DebugListener : MonoBehaviour{    private string lastMessage;    private string lastStackTrace;    private LogType lastType;    private void OnEnable()    {        Application.logMessageReceived += HandleLog;    }    private void OnDisable()    {        Application.logMessageReceived -= HandleLog;    }    private void HandleLog(string message, string stack, LogType type)    {        lastMessage = message;        lastStackTrace = stack;        lastType = type;    }    private void OnGUI()    {        if(string.IsNullOrEmpty(lastMessage)) return;        // show text at certain offset from left top corner        // and certain size        // e.g. simply place it in the center of the screen         // and make it overlay the entire screen        GUI.Label(new Rect(Screen.width / 2f, Screen.height / 2f, Screen.width, Screen.height), $"{lastType}\n{lastMessage}\n{lastStackTrace}");    }}
打开App,查看更多内容
随时随地看视频慕课网APP