2012-04-23 177 views
8

是否可以在未植根的设备上设置日志级别? 所以我想以某种方式更改设备日志级别以“调试”。这是可以做到的吗?设置Android日志级别

因为它没有扎根我不认为setprop会工作。 我也无法更改local.prop文件,因为我没有权限这样做。

除了可能很幸运,并找到一个隐藏的菜单,其中有日志级别。 有没有办法让我以其他方式增强日志级别?

感谢您的帮助。

+0

什么“设备日志级别”?而setprop不限于扎根电话AFAIK(减去只读属性) – zapl 2012-04-23 22:41:33

+0

什么,我注意到是在非根深蒂固的设备有一些要么从Android系统属性丢失或一个不允许使用setprop来修改这些属性的属性。换句话说,setprop命令可以正常工作,但更改不会粘住。因此,有没有另一种方法来设置这个特定的Android设备上的日志级别?总而言之,如果一个普通的Android设备的日志级别设置为“信息”,我可以更改这些日志级别来说“调试”? – 2012-04-24 04:02:58

回答

12

setprop

  • ,直到你重新启动你的设备,甚至扎根电话是暂时的。
  • 如果将它们写入local.prop,则只有在根目录的电话上才可以通过重新启动来保留属性。
  • 某些属性是只读的,只能在更改某些init文件时才能更改。根植手机甚至不可能。每个设备(或固件)可以具有不同的属性组。扎根的手机不会自动获得更多。

记录等级:

  • 如果打印记录的代码表示Log.d()那么这将是在“调试”水平,你不能改变,除非你改变代码并重新编译。如果您执行Log.?而不考虑级别,则没有任何内容会隐藏日志消息。
  • 如果您有固件版本构建,Android框架会隐藏一些日志消息。要显示那些你需要重新编译你的固件作为调试版本。没有机会让他们在固定电话上展示。
  • 某些消息由代码中的局部变量控制,如if (LOCAL_LOGV) Log.v(... - 您需要在此处更改代码以查看这些代码。
  • 某些消息由Config.LOGV(=始终为false)控制,请参阅Config。没有办法改变这里的破坏行为。你需要重新编译。
  • 其他一些日志消息被隐藏,直到您启用一个属性:

例如

public static final boolean DEBUG_SQL_CACHE = 
Log.isLoggable("SQLiteCompiledSql", Log.VERBOSE); 

// somewhere in code 
if (SQLiteDebug.DEBUG_SQL_CACHE) { 
    Log.d(TAG, "secret message!"); 
} 

如果你做adb shell setprop log.tag.SQLiteCompiledSql VERBOSE你应该看到这些消息弹出。 Log#isLoggable()

没有我知道的全局日志级别。

+0

首先感谢411.我真的很感激它。我想是否有办法找出日志级别设置为什么?对于设备上的特定应用,例如制造商用来调用UI菜单的东西。然后在该UI菜单调用上使用setprop将其设置为冗长?最后使用logcat来查看特定UI菜单的所有错误条件? – 2012-04-24 12:28:17

+0

如果您可以访问应用程序的源代码(或APK + A [反编译](http://stackoverflow.com/questions/1249973/decompiling-dex-into-java-sourcecode)),那么你可以检查是否有是可以启用例如日志记录通过'setprop' - 你甚至可以尝试用[apktool](http://code.google.com/p/dex2jar/wiki/ModifyApkWithDexTool)编辑源代码并自己添加一些日志记录。或者您可以使用DDMS(您可能需要使用apktool创建应用程序[debuggable](http://developer.android.com/guide/topics/manifest/application-element.html#debug))。但是,即使我能够做到这一点,但没有通用的方法来启用日志 – zapl 2012-04-24 12:56:49

+0

,因为它没有根,所以我无法在设备中获得该应用程序。我知道即将到来的情况下,制造商将设备的调试日志级别留在了设备上,以防出现网络现场测试的麻烦,并且我假设他们在启用日志记录功能时使用log.d,因为它只是启用了该调试级别。我想即使检查状态以查看日志级别是否可用,除非我像你所说的那样进入每个apk文件,并单独检查哪一个文件会很难进行检查,我的运气会很不好。 – 2012-04-24 13:03:16

2

让我提出的标准日志类微小的更换(我是作者)

https://github.com/zserge/log

这是向后兼容的,所以你只需要修改你的进口。然后,你可以通过Log.level(Log.D)Log.level(Log.W)等为您的应用程序的最小日志级别,或者您也可以使用Log.useLog(false)禁用日志。无需修改现有的日志记录代码。

尽管它的体积小本记录仪的工作原理与两者JVM和Android,可以让你跳过“标签”参数,简化了用逗号或使用格式字符串分隔的多个值的记录。所以它非常方便,易于迁移,并且只会在您的APK大小上增加〜4千字节。