android中的Log.d()或Log.e()打印出不需要的额外文本

时间:2016-10-01 08:53:13

标签: android logging

look at the image to get more idea当我只是在Android应用程序中记录消息时,Android Monitor会打印太多额外的垃圾文本,例如: 代码:

Log.d(TAG, "From: " + "34369257099");
Log.d(TAG, "Message Notification Body: " + "Hello");

在android监视器中输出:

10-01 14:15:33.262 18193-23771/com.xxxxx.xxxxxx D/MyFirebaseMsgService: From: 34369257099
10-01 14:15:33.262 18193-23771/com.xxxxx.xxxxxx D/MyFirebaseMsgService: Message Notification Body: Hello

[ 10-01 14:15:33.490 19060:19060 E/         ]
[adb] handle_packet() t->online(1) p->msg.arg0(9871) p->msg.arg1(0) OPEN


[ 10-01 14:15:33.490 19060:19060 E/         ]
[adb] handle the adb command, and the command = adb shell:cat /proc/net/xt_qtaguid/stats | grep 10206

[ 10-01 14:15:33.527 19060:19060 E/         ]
[adb] cuurent command is A_CLSE 


[ 10-01 14:15:33.686 19060:19060 E/         ]
[adb] handle_packet() t->online(1) p->msg.arg0(9872) p->msg.arg1(0) OPEN


[ 10-01 14:15:33.686 19060:19060 E/         ]
[adb] handle the adb command, and the command = adb shell:cat /proc/18193/stat

[ 10-01 14:15:33.701 19060:19060 E/         ]
[adb] cuurent command is A_CLSE 


[ 10-01 14:15:33.723 19060:19060 E/         ]
[adb] handle_packet() t->online(1) p->msg.arg0(9873) p->msg.arg1(0) OPEN


[ 10-01 14:15:33.723 19060:19060 E/         ]
[adb] handle the adb command, and the command = adb shell:cat /proc/stat

[ 10-01 14:15:33.740 19060:19060 E/         ]
[adb] cuurent command is A_CLSE 


[ 10-01 14:15:34.051 19060:19060 E/         ]
[adb] handle_packet() t->online(1) p->msg.arg0(9874) p->msg.arg1(0) OPEN


[ 10-01 14:15:34.051 19060:19060 E/         ]
[adb] handle the adb command, and the command = adb shell:cat /proc/net/xt_qtaguid/stats | grep 10206

[ 10-01 14:15:34.086 19060:19060 E/         ]
[adb] cuurent command is A_CLSE 


[ 10-01 14:15:34.258 19060:19060 E/         ]
[adb] handle_packet() t->online(1) p->msg.arg0(9875) p->msg.arg1(0) OPEN


[ 10-01 14:15:34.258 19060:19060 E/         ]
[adb] handle the adb command, and the command = adb shell:cat /proc/18193/stat

[ 10-01 14:15:34.274 19060:19060 E/         ]
[adb] cuurent command is A_CLSE 


[ 10-01 14:15:34.294 19060:19060 E/         ]
[adb] handle_packet() t->online(1) p->msg.arg0(9876) p->msg.arg1(0) OPEN


[ 10-01 14:15:34.294 19060:19060 E/         ]
[adb] handle the adb command, and the command = adb shell:cat /proc/stat

[ 10-01 14:15:34.315 19060:19060 E/         ]
[adb] cuurent command is A_CLSE 


[ 10-01 14:15:34.613 19060:19060 E/         ]
[adb] handle_packet() t->online(1) p->msg.arg0(9877) p->msg.arg1(0) OPEN


[ 10-01 14:15:34.613 19060:19060 E/         ]
[adb] handle the adb command, and the command = adb shell:cat /proc/net/xt_qtaguid/stats | grep 10206

[ 10-01 14:15:34.648 19060:19060 E/         ]
[adb] cuurent command is A_CLSE 


[ 10-01 14:15:34.831 19060:19060 E/         ]
[adb] handle_packet() t->online(1) p->msg.arg0(9878) p->msg.arg1(0) OPEN


[ 10-01 14:15:34.831 19060:19060 E/         ]
[adb] handle the adb command, and the command = adb shell:cat /proc/18193/stat

[ 10-01 14:15:34.849 19060:19060 E/         ]
[adb] cuurent command is A_CLSE 


[ 10-01 14:15:34.867 19060:19060 E/         ]
[adb] handle_packet() t->online(1) p->msg.arg0(9879) p->msg.arg1(0) OPEN


[ 10-01 14:15:34.867 19060:19060 E/         ]
[adb] handle the adb command, and the command = adb shell:cat /proc/stat

[ 10-01 14:15:34.885 19060:19060 E/         ]
[adb] cuurent command is A_CLSE 


[ 10-01 14:15:35.176 19060:19060 E/         ]
[adb] handle_packet() t->online(1) p->msg.arg0(9880) p->msg.arg1(0) OPEN


[ 10-01 14:15:35.176 19060:19060 E/         ]
[adb] handle the adb command, and the command = adb shell:cat /proc/net/xt_qtaguid/stats | grep 10206

[ 10-01 14:15:35.210 19060:19060 E/         ]
[adb] cuurent command is A_CLSE 


[ 10-01 14:15:35.404 19060:19060 E/         ]
[adb] handle_packet() t->online(1) p->msg.arg0(9881) p->msg.arg1(0) OPEN


[ 10-01 14:15:35.404 19060:19060 E/         ]
[adb] handle the adb command, and the command = adb shell:cat /proc/18193/stat

[ 10-01 14:15:35.421 19060:19060 E/         ]
[adb] cuurent command is A_CLSE 


[ 10-01 14:15:35.439 19060:19060 E/         ]
[adb] handle_packet() t->online(1) p->msg.arg0(9882) p->msg.arg1(0) OPEN


[ 10-01 14:15:35.439 19060:19060 E/         ]
[adb] handle the adb command, and the command = adb shell:cat /proc/stat

[ 10-01 14:15:35.457 19060:19060 E/         ]
[adb] cuurent command is A_CLSE 


[ 10-01 14:15:35.738 19060:19060 E/         ]
[adb] handle_packet() t->online(1) p->msg.arg0(9883) p->msg.arg1(0) OPEN


[ 10-01 14:15:35.738 19060:19060 E/         ]
[adb] handle the adb command, and the command = adb shell:cat /proc/net/xt_qtaguid/stats | grep 10206

[ 10-01 14:15:35.764 19060:19060 E/         ]
[adb] cuurent command is A_CLSE 


[ 10-01 14:15:35.974 19060:19060 E/         ]
[adb] handle_packet() t->online(1) p->msg.arg0(9884) p->msg.arg1(0) OPEN


[ 10-01 14:15:35.974 19060:19060 E/         ]
[adb] handle the adb command, and the command = adb shell:cat /proc/18193/stat

[ 10-01 14:15:35.990 19060:19060 E/         ]
[adb] cuurent command is A_CLSE 


[ 10-01 14:15:36.009 19060:19060 E/         ]
[adb] handle_packet() t->online(1) p->msg.arg0(9885) p->msg.arg1(0) OPEN


[ 10-01 14:15:36.009 19060:19060 E/         ]
[adb] handle the adb command, and the command = adb shell:cat /proc/stat
你能帮我解决一下吗?我的意思是为什么要打印这些额外的文字?我该如何摆脱这个? 我使用过滤器只显示与包相关的日志,并尝试过滤TAG。但是在附图中看到仍然在一些日志中打印垃圾文本。

先谢谢

6 个答案:

答案 0 :(得分:3)

由于不需要的线条似乎都有' ['在它们中,我们应该能够创建一个排除那些线条和过滤器的过滤器。得到你需要的东西(你不能在任何日志语句中使用该字符)。

使用^[^\[]+$创建一个过滤器作为日志消息(并确保选中正则表达式)。您还必须设置日志标记包名称,或者您从其他不包含' [& #39;

感谢here获得正则表达式的帮助。

screenshot of logcat Filter editor

答案 1 :(得分:1)

在右上角正确看到图像,我们有类似基本过滤器的东西。使用“仅显示所选应用程序”将只允许您查看属于您应用的内容。您可以使用“编辑过滤器配置”来使用更复杂的过滤器。

答案 2 :(得分:1)

你使用ndk librairies吗?

那些日志看起来像本机代码输出。

https://android.googlesource.com/platform/system/core/+/android-4.4_r1/adb/adb.c有一些输出行的命令:

D("handle_packet() %c%c%c%c\n", ((char*) (&(p->msg.command)))[0],
            ((char*) (&(p->msg.command)))[1],
            ((char*) (&(p->msg.command)))[2],
            ((char*) (&(p->msg.command)))[3]);

我担心您无法控制这些输出,除了排除或重写您嵌入项目中的本机代码。如果您没有嵌入特定的本机库,这可能来自os设备的本机核心源。

答案 3 :(得分:1)

有两种方法可以做到这一点

  1. 首先下载cygwin终端并运行命令adb logcat | grep appname 这里的应用程序名称是您的应用程序名称,用于包名称。请注意,此命令仅在cygwin中运行。
  2. 过滤日志输出 日志消息的标记是一个短字符串,表示消息源自的系统组件(例如,视图系统的“视图”)。 优先级是以下字符值之一,从最低优先级到最高优先级排序: V:详细(最低优先级) D:调试 我:信息 W:警告 E:错误 F:致命的 S:无声(最高优先级,没有任何打印) 通过运行logcat并观察每条消息的前两列,您可以获得系统中使用的标签列表,优先级为/。
  3. 以下是使用logcat -v brief output命令获得的简短logcat输出的示例。它显示该消息涉及优先级“I”和标记“ActivityManager”:

    I/ActivityManager(  585): Starting activity: Intent { action=android.intent.action...}
    

    要将日志输出减少到可管理级别,可以使用过滤器表达式限制日志输出。过滤器表达式允许您向系统指示您感兴趣的标签优先级组合 - 系统会抑制指定标签的其他消息。

    过滤器表达式遵循以下格式标记:priority ...,其中tag表示感兴趣的标记,priority表示为该标记报告的最低优先级。该标记的消息等于或高于指定的优先级将写入日志。您可以在单个过滤器表达式中提供任意数量的标记:优先级规范。这一系列规范是以空格分隔的。

    这是一个过滤器表达式的示例,它禁止除标记为“ActivityManager”,优先级为“Info”或更高版本的所有日志消息,以及标记为“MyApp”的所有日志消息,优先级为“Debug”或更高:

    adb logcat ActivityManager:I MyApp:D *:S
    

    上述表达式中的最后一个元素*:S将所有标记的优先级设置为“silent”,从而确保只显示带有“ActivityManager”和“MyApp”的日志消息。使用*:S是确保日志输出仅限于您明确指定的过滤器的绝佳方法 - 它可以让您的过滤器充当日志输出的“白名单”。

    以下过滤器表达式在所有标记上显示优先级为“warning”及更高级别的所有日志消息:

     adb logcat *:W
    

    如果您正在从开发计算机运行logcat(而不是在远程adb shell上运行它),您还可以通过导出环境变量ANDROID_LOG_TAGS的值来设置默认过滤器表达式:

    export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
    

    请注意,如果从远程shell运行logcat或使用adb shell logcat,则不会将ANDROID_LOG_TAGS过滤器导出到模拟器/设备实例。

答案 4 :(得分:0)

它们是来自其他进程的日志。你不能阻止它们发生,所以你必须过滤日志输出,只显示你感兴趣的东西。

答案 5 :(得分:-3)

只是猜测:您正在使用另一种可以增加更多输出的Log类。 要检查这一点,请将Log.d()调用更改为android.util.Log.d()调用。