设置Android日志级别

时间:2012-04-23 22:20:02

标签: android

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

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

除了可能变得幸运并找到一个隐藏菜单,其中包含日志级别。 有没有办法让我以其他方式提高日志级别?

感谢您的帮助。

2 个答案:

答案 0 :(得分:12)

setprop

  • 是暂时的,直到您重新启动设备,即使是在root电话上也是如此。
  • 如果您将属性写入local.prop,则可以通过重新启动来保留属性,这只能在有根电话上使用。
  • 某些属性是只读的,只有在更改某些init文件时才能更改。在根电话上甚至可能是不可能的。
  • 每个设备(或固件)可以具有不同的属性集。根电话不会自动更多。

记录级:

  • 如果打印日志的代码显示为Log.d(),那么它将处于“调试”级别,除非您更改代码并重新编译,否则无法更改。如果您执行Log.?而不管级别如何,则没有任何内容可以隐藏日志消息。
  • 如果您拥有固件版本,Android框架会隐藏一些日志消息。要显示那些需要重新编译固件作为调试版本的内容。没有机会让那些在根电话上显示。
  • 某些消息由代码中的本地变量控制,如if (LOCAL_LOGV) Log.v(... - 您需要在此处更改代码以查看这些代码。
  • 某些邮件由Config.LOGV(=始终false)控制,请参阅Config。也无法在这里改变破碎的行为。你需要重新编译。
  • 隐藏其他一些logmessages,直到您启用属性:

例如

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()

我知道没有全局loglevel。

答案 1 :(得分:2)

让我建议一个微小的替代标准日志类(我是作者)

https://github.com/zserge/log

它向后兼容,因此您只需修改导入。然后,您可以通过Log.level(Log.D)Log.level(Log.W)等设置应用的最低日志级别,也可以使用Log.useLog(false)禁用日志。无需修改现有的日志记录代码。

尽管它的体积很小,但这个记录器兼容JVM和Android,可以让你跳过"标签"参数,简化了用逗号分隔的多个值或使用格式字符串的日志记录。所以它非常方便,易于迁移,只能为你的APK大小增加~4千字节。