android-studio v一下意思 - Android Log.v(),Log.d(),Log.i(),Log.w(),Log.e() - 何時使用每個?





log教學 log顯示 (6)


源代碼提供了一些基本的指導:

按照冗長的順序排列,從最少到最多是ERROR,WARN,INFO,DEBUG,VERBOSE。 除了在開發期間,絕不應該將Verbose編譯為應用程序。 調試日誌被編譯但在運行時剝離。 始終保留錯誤,警告和信息日誌。

更多細節,庫爾蒂斯的答案已經死了。 我只是補充一點:不要在INFO或以上記錄任何個人身份或私人信息( WARN / ERROR )。 否則,錯誤報告或包含日誌記錄的任何其他內容可能會受到污染。

不同的LogCat方法是:

Log.v(); // Verbose
Log.d(); // Debug
Log.i(); // Info
Log.w(); // Warning
Log.e(); // Error

使用每種類型的日誌記錄有什麼合適的情況? 我知道這可能只是一些語義,也許它並不重要,但對於Android Studio和Eclipse中的LogCat過濾,我很高興知道我在適當的時候使用了正確的方法。




您可以使用LOG,例如:

Log.e(String, String) (error)
Log.w(String, String) (warning)
Log.i(String, String) (information)
Log.d(String, String) (debug)
Log.v(String, String) (verbose)

示例代碼:

private static final String TAG = "MyActivity";
...
Log.i(TAG, "MyClass.getView() — get item number " + position);



我認為這些不同類型的日誌記錄的意義在於,如果您希望您的應用程序基本上自行篩選其自己的日誌。 因此,Verbose可能會在您的應用程序中記錄絕對重要的所有內容,然後調試級別會記錄詳細日誌的子集,然後Info級別會記錄調試日誌的子集。 當您仔細查看錯誤日誌時,您只需記錄可能發生的任何類型的錯誤。 還有一個名為Fatal的調試級別,用於在應用程序中真正遇到粉絲的情況。

總的來說,你是對的,它基本上是任意的,你可以定義什麼被認為是一個調試日誌與信息,對比和錯誤等。




Android Studio網站最近(我認為)提供了一些建議,可以從不同的日誌級別期望什麼樣的消息,這些消息可能會與Kurtis的答案一起使用:

  • 詳細 - 顯示所有日誌消息(默認)。
  • 調試 - 顯示僅在開發過程中有用的調試日誌消息,以及此列表中較低的消息級別。
  • 信息 - 顯示日常使用的預期日誌消息以及此列表中較低的消息級別。
  • 警告 - 顯示尚未出錯的可能問題,以及此列表中較低的消息級別。
  • 錯誤 - 顯示導致錯誤的問題,以及此列表中較低的消息級別。
  • 斷言 - 顯示開發人員期望的問題永遠不會發生。



不同的方法是優先級的指示。 正如你列出他們,他們至少從最重要的。 我認為,如何將代碼專門映射到代碼中調試日誌取決於您正在使用的組件或應用,以及Android如何在不同的構建版本(eng,userdebug和user)上處理它們。 我在Android的本地守護進程中做了相當多的工作,這就是我如何做的。 它可能不適用於您的應用程序,但可能有一些共同點。 如果我的解釋聽起來含糊不清,那是因為其中一些更多的是藝術而不是科學。 我的基本規則是要盡可能高效,確保您可以合理地調試組件,而不會影響系統性能,並始終檢查錯誤並記錄它們。

V - 不同間隔的狀態打印輸出,或組件處理的任何事件。 也可能非常詳細地顯示我的組件接收或發送的消息/事件的有效負載。

D - 在我的組件內發生的次要事件的細節,以及我的組件接收或發送的消息/事件的有效載荷。

I - 組件接收或發送的任何消息/事件的標頭,以及對組件操作至關重要的有效負載的任何重要部分。

W - 發生的異常或可疑的事情,但不一定是錯誤。

E - 錯誤,意思是當事情按照他們應該的方式工作時不應該發生的事情。

我看到人們犯的最大錯誤是他們過度使用V,D和I等東西,但從不使用W或E.如果根據定義,錯誤不應該發生,或者應該只發生很少,那麼它是非常便於您在發生消息時記錄消息。 另一方面,如果每次有人按下某個鍵時執行Log.i(),就會濫用共享日誌記錄資源。 當然,使用常識,並小心錯誤日誌的控制之外的東西(如網絡錯誤),或包含在緊密循環中的東西。

也許不好

Log.i("I am here");

Log.e("I shouldn't be here");

考慮到這一切,代碼越接近“生產就緒”,越可以限制代碼的基本日誌記錄級別(您需要alpha,V in,生產中的I,甚至生產中的W )。 您應該運行一些簡單的用例並查看日誌,以確保在應用更嚴格的過濾時仍可以大致了解發生的情況。 如果你使用下面的過濾器運行,你仍然應該能夠告訴你的應用正在做什麼,但可能沒有獲得所有的細節。

logcat -v threadtime MyApp:I *:S



我已經發布了針對Android的交叉編譯Python 2.7.2的說明和補丁,您可以在我的博客中獲取它: http://mdqinc.com/blog/2011/09/cross-compiling-python-for-android/ : http://mdqinc.com/blog/2011/09/cross-compiling-python-for-android/

編輯:我已經開源Ignifuga ,我的2D遊戲引擎,它是基於Python / SDL的,它為Android進行交叉編譯。 即使你不使用它來進行遊戲,你也可以從代碼和構建器工具中獲得有用的想法(在Tim之後,你知道是誰)。





android android-studio logcat