在 Logcat 上显示更多字符串

Posted

技术标签:

【中文标题】在 Logcat 上显示更多字符串【英文标题】:Displaying More string on Logcat 【发布时间】:2011-01-11 09:05:02 【问题描述】:

我目前正在开发一个使用“JSON”作为服务器响应的 android 应用程序。 通常我处理 JSON 响应。但是现在我有一个logcat的问题, 如果 JSON 响应字符串很长,超过 x 个字符(我不知道 logcat 可以显示的最大字符串到底是多少),则缺少一些 JSON 字符串。

虽然它仍然可以给我输出,但我需要从服务器传输的 JSON 字符串的信息。

是否有可能在 logcat 上显示更多字符串?比如增加缓冲区或任何我可以用来增加 logcat 可以显示的最大字符串长度的参数。

【问题讨论】:

为什么不将 json 拆分成多个消息? 我遇到了同样的问题 【参考方案1】:

丑陋,但它可以完成工作:

public static void longInfo(String str) 
    if(str.length() > 4000) 
        Log.i(TAG, str.substring(0, 4000));
        longInfo(str.substring(4000));
     else
        Log.i(TAG, str);

【讨论】:

你也可以迭代而不是递归...... ::shrug:: @Travis 什么是迭代;)? 我只需要在Log.i() 中添加一个“标签”参数,然后就可以运行了。 非常优雅的解决方案^__^ 虽然解决方案很优雅,但 str 非常非常长,您可能会得到 ***ErrorOutOfMemoryError【参考方案2】:
if(xml.length() > 4000) 
 for(int i=0;i<xml.length();i+=4000)
    if(i+4000<xml.length())
        Log.i("rescounter"+i,xml.substring(i, i+4000));
     else
        Log.i("rescounter"+i,xml.substring(i, xml.length()));

 else
Log.i("resinfo",xml);

我就是这样做的。

【讨论】:

【参考方案3】:

我们的一些 RESTful API 返回很长的 JSON 响应。这是为 LogCat 格式化它们的方法:

private static final int LOGCAT_MAX_LENGTH = 3950;

...

private void logLongJsonStringIfDebuggable(String s) 
    if (BuildConfig.DEBUG) 
        while (s.length() > LOGCAT_MAX_LENGTH) 
            int substringIndex = s.lastIndexOf(",", LOGCAT_MAX_LENGTH);
            if (substringIndex == -1)
                substringIndex = LOGCAT_MAX_LENGTH;
            Log.d(TAG, s.substring(0, substringIndex));
            s = s.substring(substringIndex).trim();
        
        Log.d(TAG, s);
    

【讨论】:

【参考方案4】:

如果你没有使用 eclipse,或者你使用了 @Nanne 答案对你不起作用,我只能想到两种选择:

    最好但更复杂,我认为您的 JSON 由某种“可迭代对象”(JSON 对象和/或数组)组成,因此,您可以解析和遍历 JSON 并分别打印 LogCat 中的每个元素 更简单但也更丑陋,将 JSON 字符串拆分为子字符串并在 LogCat 中打印每个子字符串(您可以找到不同的拆分字符串的方法here)

编辑:另一种可能性:将JSON像日志一样写入SD卡中的文件,然后在您要检查响应时检索该文件

【讨论】:

是否无法将 IDE(在我的情况下为 Android Studio)配置为不切断我的日志语句?在 Xcode 中,我从来没有遇到过这个问题。【参考方案5】:

为什么不从命令行使用 logcat?

我怀疑它是否会如您所愿,但为什么不试一试呢?

发出命令

./adb -e logcat

来自具有 adb 的目录。 这是用于模拟器的。 将设备的-e 替换为-d

【讨论】:

在我的测试中,命令行 logcat 似乎也在某个点切断了日志条目字符串。【参考方案6】:

一般来说,如果你想将输出输出到 Logcat 中,你应该使用“Log”命令。

一个例子:

Log.d(TAG,"OUTPUT"):

d = 调试 TAG = 您定义的字符串,显示在 Logcat 中“正常”输出之前的列中 OUTPUT = 你想打印的东西

Log 是一个日志类,可用于将消息打印到 logcat。如果您在 DDMS 上运行 logcat,您可以实时阅读消息(接下来介绍)。常见的日志记录方法包括:v(String, String) (verbose), d(String, String) (debug), i(String, String) (information), w(String, String) (warning) and e(String, String) )(错误)。

更多信息:

http://developer.android.com/guide/developing/debug-tasks.html

编辑:

我之前提到的是,为了测试一些你不应该使用的输出:

System.out.println("JSON stuff");

您应该在代码中使用,而不是使用它:

// Values just as example
private static void string TAG = "+++JSON+++";
...
Log.d(TAG,"JSON stuff in here");
...

它将显示在 Logcat 中。我不完全知道为什么,但这不是更好的方法。 像这样你也可以显示错误消息:

Log.e(...);

它会改变你在 Logcat 中输出的颜色,所以你可能会更好地看到它,例如发生错误。

【讨论】:

问题是他用的是logcat,但是logcat条目中的字符串长度有上限。

以上是关于在 Logcat 上显示更多字符串的主要内容,如果未能解决你的问题,请参考以下文章

EditText 不显示翻译,而 Logcat 显示

Android Studio突然在Logcat中显示太多日志[关闭]

如何使用 adb logcat 查看某个进程的输出日志

在 logcat 中查看日志中给出的字符串 - Android

cmd命令行中logcat输出日志中文乱码

Android - 设置 logcat 消息的最大长度