10

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

由于它没有扎根,我认为 setprop 不会起作用。我也不能更改 local.prop 文件,因为我没有这样做的权限。

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

谢谢您的帮助。

4

2 回答 2

14

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,你应该会看到这些消息弹出。日志#isLoggable()

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

于 2012-04-24T07:33:10.703 回答
2

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

https://github.com/zserge/log

它是向后兼容的,所以你只需要修改你的导入。然后,您可以通过Log.level(Log.D)orLog.level(Log.W)等​​设置应用程序的最低日志级别,或者您可以使用Log.useLog(false). 无需修改现有的日志记录代码。

Despite of its small size this logger works with both, JVM and Android, allows you to skip the "tag" parameter, simplifies logging of multiple values separated by commas or using a format string. So it's really convenient, easy to migrate to, and only adds ~4 kilobytes to your APK size.

于 2015-06-14T08:03:35.310 回答