[英]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
僅在引導期間讀取。 /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.