为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
繁星淼淼 2023-08-13 16:02:33
我想知道是否有任何方法可以从代码中检索运行时在控制台中记录的消息。我正在 Android 上部署一个应用程序,据我所知,控制台只能在开发版本下打印,而我希望它在稳定版本下打印。
查看完整描述

1 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

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.Label

public 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}");

    }

}


查看完整回答
反对 回复 2023-08-13
  • 1 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信