Android Log.v(),Log.d(),Log.i(),Log.w(),Log.e() - 何時使用每個?


Answers

不同的方法是優先級的指示。 正如你列出他們,他們至少從最重要的。 我認為,如何將代碼專門映射到代碼中調試日誌取決於您正在使用的組件或應用,以及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
Question

不同的LogCat方法是:

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

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




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

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




您可以使用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);





Related