在Android中禁用本机logcat输出

时间:2012-07-20 09:38:56

标签: android logcat galaxy

我正在使用三星Galaxy S3设备进行开发,我的应用程序正在使用相机。 在logcat中,本机系统使用标记Camera-JNI生成的输出每秒写入logcat 20次,导致logcat非常快速地清理最旧的条目。

是否可以禁用已安装的应用程序或系统日志中的日志以防止这种情况发生?过滤器不起作用,因为logcat仍然被填充并且行仍然被clared。

谢谢。

编辑

文档says this:

  

您可以通过设置系统属性来更改默认级别:setprop log.tag.<YOUR_LOG_TAG> <LEVEL>。您还可以创建一个local.prop文件,其中包含以下内容:   log.tag.<YOUR_LOG_TAG>=<LEVEL>并将其放在/data/local.prop

编辑2

我已经这样做了(根设备,将local.prop文件推送到/ data并重新启动)但是标签仍然出现

3 个答案:

答案 0 :(得分:7)

我可以通过检查android源代码(2.3.x)来看到以下内容:

执行

shell setprop log.tag.XYZ

在此处不起作用(frameworks/base/core/jni/android_hardware_Camera.cpp),因为正在使用LOGV()宏进行日志记录。此日志记录方法不使用属性来检测某个组件是否希望禁用日志记录。这就是我能够通过android代码跟踪调用。

因此,使用setprop(...)无法用于禁用来自Android系统组件的日志记录,但是当日志来自用Java编写的用户应用程序等时,它应该有效,这些应用程序使用base/core/java/android/util/Log.javaframeworks/base/core/jni/android_util_Log.cpp记录。我的猜测是android_util_Log_isLoggable()是用于过滤的内容。

恕我直言,除了您的设备的源代码构建和禁用您正在使用的相机代码中的LOGV宏之外,别无其他选择。

答案 1 :(得分:1)

您可以尝试adb shell setprop log.tag.Camera-JNI ERROR之类的内容。如果它不起作用,只需过滤日志或将其转储到文件并使用grep查找您感兴趣的行或使用grep -v Camera-JNI过滤掉相机。

答案 2 :(得分:0)

如果您想查看特定标签,请使用:

logcat -s YourTag:* SecondTag:* ThirdTag:* ...

您也可以使用adb logcat

只需指定<TAG>:*次,即可过滤所需的标记。

示例: adb logcat -s AndroidRuntime:* MyApp:*过滤了AndroidRuntimeMyApp个标记。因此,您可以看到所有未捕获的异常(崩溃)以及应用程序的所有日志。