日誌
任何高質量的 Android 應用程式都會通過應用程式日誌跟蹤它正在做什麼。這些日誌允許開發人員輕鬆除錯幫助,以診斷應用程式正在發生的事情。可在此處找到完整的 Android 文件,但摘要如下:
基本日誌記錄
Log
類是編寫開發人員日誌的主要來源,通過指定 tag
和 message
。標記是你可以用來過濾日誌訊息的標識,以標識來自你的特定活動的行。只需致電
Log.v(String tag, String msg);
並且 Android 系統會向 logcat 寫一條訊息:
07-28 12:00:00.759 24812-24839/my.packagename V/MyAnimator: Some log messages
└ time stamp | app.package┘ | └ any tag |
process & thread ids ┘ log level┘ └ the log message
提示:
注意程序 ID 和執行緒 ID。如果它們是相同的 - 日誌來自主/ UI 執行緒!
可以使用任何標記,但通常使用類名作為標記:
public static final String tag = MyAnimator.class.getSimpleName();
日誌級別
Android 記錄器有 6 個不同的級別,每個級別都有一定的用途:
ERROR
:Log.e()
- 用於表示嚴重失敗,這是投擲
Exception
時列印的等級。
- 用於表示嚴重失敗,這是投擲
WARN
:Log.w()
- 用於指示警告,主要用於可恢復的故障
INFO
:Log.i()
- 用於指示有關應用程式狀態的更高階別資訊
DEBUG
:Log.d()
- 用於記錄在除錯應用程式時有用的資訊,但在執行應用程式時會妨礙這些資訊
VERBOSE
:Log.v()
- 用於記錄反映應用程式狀態的小細節的資訊
ASSERT
:Log.wtf()
- 用於記錄有關不應發生的情況的資訊。
- wtf 代表多麼可怕的失敗。
記錄的動機
日誌記錄的動機是通過瀏覽應用程式中的事件鏈來輕鬆查詢錯誤,警告和其他資訊。例如,假設一個應用程式從文字檔案中讀取行,但錯誤地認為該檔案永遠不會為空。日誌跟蹤(不記錄的應用程式)看起來像這樣:
E/MyApplication: Process: com.example.myapplication, PID: 25788
com.example.SomeRandomException: Expected string, got 'null' instead
接下來是一堆最終導致違規行的堆疊跟蹤,其中通過偵錯程式逐步執行最終會導致問題
但是,啟用了日誌記錄的應用程式的日誌跟蹤可能如下所示:
V/MyApplication: Looking for file myFile.txt on the SD card
D/MyApplication: Found file myFile.txt at path <path>
V/MyApplication: Opening file myFile.txt
D/MyApplication: Finished reading myFile.txt, found 0 lines
V/MyApplication: Closing file myFile.txt
...
E/MyApplication: Process: com.example.myapplication, PID: 25788
com.example.SomeRandomException: Expected string, got 'null' instead
快速瀏覽日誌,很明顯檔案是空的。
記錄時需要考慮的事項:
雖然日誌記錄是一個強大的工具,它允許 Android 開發人員更深入地瞭解其應用程式的內部工作,但日誌記錄確實存在一些缺點。
日誌可讀性:
Android 應用程式通常會同時執行多個日誌。因此,每個日誌都易於閱讀並且僅包含相關的必要資訊非常重要。
效能:
記錄確實需要少量的系統資源。一般而言,這並不值得關注,但是,如果過度使用,日誌記錄可能會對應用程式效能產生負面影響。
安全:
最近,Google Play 市場中新增了幾個 Android 應用程式,允許使用者檢視所有正在執行的應用程式的日誌。這種非預期的資料顯示可以允許使用者檢視機密資訊。根據經驗,在將應用程式釋出到市場之前,請始終刪除包含非公開資料的日誌。
結論:
日誌記錄是 Android 應用程式的重要組成部分,因為它為開發人員提供了強大功能。建立有用的日誌跟蹤的能力是軟體開發中最具挑戰性的方面之一,但 Android 的 Log 類有助於使其更容易。
有關更多文件和示例,請訪問 Logging 並使用 Logcat