Android日志logging级别

我在configurationAndroid日志logging方面有点困难。 这是我的代码看起来像:

if (Log.isLoggable("MY_TAG", Log.VERBOSE)) { Log.v("MY_TAG", "Here's a log message"); } 

很简单,对吧?

不过,我在获取Log.isLoggable("MY_TAG", Log.VERBOSE)返回true方面遇到了Log.isLoggable("MY_TAG", Log.VERBOSE)困难。

根据http://developer.android.com/reference/android/util/Log.html ,我尝试添加一个local.prop文件到/ data /目录,如下所示:

 log.tag.MY_TAG=VERBOSE 

但没有运气。 我也试过:

     System.setProperty("log.tag.MY_TAG", String.valueOf(Log.VERBOSE)); 

    但是这也行不通。

    任何想法,我在做什么错在这里? 我在Nexus 1上运行Android 2.1-update1,如果这有什么区别的话。

    Related of "Android日志logging级别"

    尝试

     adb shell setprop log.tag.MyAppTag VERBOSE 

    看来,更高版本的Android希望/data/local.prop只能被root用户写入。 adb push命令似乎最初创build文件时授予每个人读/写访问权限(因为默认文件掩码是777 )。 Android明智地忽略/data/local.prop因为这可能是一个安全风险。

    我只尝试过Android 2.3.3和4.1.2。 前者在阅读一个世界可写的local.prop没有问题,而后者似乎默默无视文件的内容。

    按照原始问题中的描述创build一个local.prop文件:

     log.tag.MY_TAG=VERBOSE 

    然后把它推到设备上,如下所示:

     adb push local.prop /data/local.prop adb shell chmod 644 /data/local.prop adb shell chown root.root /data/local.prop adb reboot 

    您可以仔细检查以确保local.prop中的值是通过执行以下local.prop来读取的:

     adb shell getprop | grep log.tag 

    总之:

    • /data/local.prop只在启动时读取。
    • Android的更高版本似乎要求/data/local.prop文件的权限必须正确设置,否则将不会被读取。 该文件只能由root用户写入。

    使用adb shell setprop log.tag.MyAppTag VERBOSE也可以工作。 问题是重新启动后属性值会丢失。

    一个重要的目标是不要发送一个生产应用程序,并留下大量的日志调用,增加它的大小,甚至可能影响其性能。

    要做到这一点,我的build议是将这些常量放在每个将要进行日志调用的类的顶部:

     static final boolean DEBUG = false; static final String TAG = "<MyClass>" 

    现在你在哪里login,执行以下操作:

     if (DEBUG) Log.v(TAG, "Something"); 

    通过将DEBUG常量更改为true来打开日志。 (如果你愿意的话,你可以让这个静态类的所有应用程序的代码使用…这对于一个小应用程序来说是有意义的,但是随着事情变得越来越大,决定使用哪个部分来logging日志是很好的。

    通过这样做,当您使用DEBUG = false构build您的应用程序时,您所有的日志logging代码不仅不会被执行,而且会被完全剥离出您的应用程序。 这很好,因为它允许您在代码中保留相当广泛的日志logging,以便在需要时启用,而不必担心这会如何影响运输应用程序的大小。 基本上就是把日志扔到你需要的地方,不用担心把它们放在里面。

    这是很多Android框架所采用的方法。 例如, Activity ManagerService 。

    这些常数位于顶部,各种日志行基于它们散布在各处。 (和其他一些子debugging常量的各个方面,因为这个文件是荒谬的愚蠢大)。