簡體   English   中英

Android日志記錄級別

[英]Android logging levels

我在配置Android日志時遇到了一些困難。 這是我的代碼的樣子:

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

很簡單吧?

但是,我在使Log.isLoggable("MY_TAG", Log.VERBOSE)返回true時遇到了一些困難。

根據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,如果這有任何區別的話。

嘗試

adb shell setprop log.tag.MyAppTag VERBOSE

似乎Android的更高版本希望/data/local.prop只能由root寫入。 adb push命令似乎最初創建文件,授予每個人讀/寫訪問權限(因為默認文件掩碼是777 )。 明智地,Android會忽略/data/local.prop因為這可能會帶來安全風險。

我只嘗試過Android 2.3.3和4.1.2。 前者在讀取local.prop可寫的local.prop沒有問題,而后者似乎默默地忽略了文件的內容。

按照原始問題中的描述創建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也可以。 問題是重啟后屬性值會丟失。

一個重要的目標是不發布生產應用程序,其中包含大量的日志調用,增加其大小,甚至甚至可能影響其性能。

為此,我的建議是將這些常量放在每個將要進行日志調用的類的頂部:

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

現在您在哪里記錄,執行以下操作:

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

通過將DEBUG常量更改為true來打開日志。 (如果你願意,你可以讓一個類使用這些靜態代碼來使用所有應用程序的代碼......這對於一個小應用程序來說很有意義,但隨着事情變得越來越大,最好決定哪些部分可以開啟登錄。)

通過這樣做,當您使用DEBUG = false構建應用程序時,您的所有日志記錄代碼不僅不會被執行,而且會完全從您的應用程序中刪除。 這很好,因為它允許您在代碼中保留相當廣泛的日志記錄,以便在需要時打開,而不必擔心這將如何影響您的運送應用程序的大小。 基本上只需將日志放在任何需要它們的地方,並且不用擔心讓它們進入。

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

這個常量位於頂部,各種日志線基於它們分散。 (以及它的各個方面的一堆其他子調試常量,因為這個文件非常愚蠢。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM