2013-04-16 30 views
3

我想介紹一些記錄到我接管的Android應用程序。我希望能夠在開發過程中引用此日誌文件,並且如果客戶在程序生產期間遇到問題,可以獲取日誌的副本。適用於Android的良好記錄技巧

由於這將在生產中,我想使日誌文件成爲滾動日誌,所以它不會消​​耗太多的資源。

在一些android例子中,我注意到了import android.util.Log;。我很好奇,如果這是一個標準的Android日誌記錄方式。如果沒有,那麼做這件事的好方法是什麼(例如,在java中進行編碼時,我真的很喜歡log4j)。

  1. android.util.log可以像我要求的滾動日誌嗎?

  2. 默認情況下,android.util.Log在哪裏寫入?

  3. 如果只是爲了控制檯,有沒有辦法將它寫入Android設備上的滾動日誌文件,然後可以通過電子郵件發送,如果程序有問題?

+3

[從這裏開始](http://developer.android.com/tools/debugging/debugging-log.html) – FoamyGuy

+0

對於滾動你可以使用這個庫http://nikedlab.com/android-log-rolling-library.html – NikedLab

回答

1

能android.util.log執行滾動日誌像我請求?

1)不像你要求的。日誌將會滾動,但對於設備上的所有應用程序,而不僅僅是您的應用程序。

android.util.Log在默認情況下寫入哪裏?

2)Android日誌系統,可通過logcat查看。如果你熟悉Windows事件日誌,可以把它看作是Windows事件日誌。我會下載一個logcat程序並滾動瀏覽系統日誌以熟悉它們。

如果只是爲了控制檯,有沒有辦法將它寫入android設備上的滾動日誌文件,然後可以通過電子郵件發送,如果程序有問題?

3)您可以將自己的滾動日誌寫入文件系統,然後通過電子郵件發送。但是,您將不得不實現此功能。您還可以嘗試查看是否有任何第三方日誌記錄工具/庫可以滿足您的需求。

1

首先。您的生產代碼中不應默認啓用大量日誌記錄。我們通過編寫默認日誌類的擴展來解決它,如下所示。

有了它,日誌記錄在開發代碼中是默認的,在生產代碼中是默認關閉的。您可以編寫一些小型隱藏啓用器,以便您的客戶在需要時啓動日誌記錄。

其次使用應用程序來存儲和檢索日誌!嘗試CatLog或類似的。

祝你好運!

public class MyLog { 

    private static boolean m_Enabled = BuildConfig.DEBUG; 

    public MyLog() { 

    } 

    public static void e(String tag, String msg) { 
     if (m_Enabled) Log.e(tag, msg); 
    } 

    public static void w(String tag, String msg) { 
     if (m_Enabled) Log.w(tag, msg); 
    } 

    public static void i(String tag, String msg) { 
     if (m_Enabled) Log.i(tag, msg); 
    } 

    public static void d(String tag, String msg) { 
     if (m_Enabled) Log.d(tag, msg); 
    } 

    public static void v(String tag, String msg) { 
     if (m_Enabled) Log.v(tag, msg); 
    } 

    public static void enable() { 
     m_Enabled = true; 
    } 

    public static void disable() { 
     m_Enabled = false; 
    } 

    public static boolean isEnabled() { 
     return m_Enabled; 
    } 
} 
+0

我認爲如果您正在進行最小限度的日誌記錄,並且希望將其用於調試代碼的所有部分,那麼這是一個很好的實現。例如,我可能不想爲某些區域實現調試,而爲其他人(logcat可能會擁塞)執行調試。我想我寧願有一個if(DEBUG){Log ....;}出於性能原因。我會在上面的實現中做一個額外的方法調用。 –

+0

我和你在一起。此外,在嘗試解引用某些對象以打印到日誌時,您不會冒NPE的風險。不足之處在於,代碼中充斥着很多if(...)語句。我如何錯過C/C++並定義! – mach

1

有文檔和示例如何做一個大小有界的滾動日誌使用標準Log.X And​​roid的通話&「的logcat」在Android設備上, - 例如參見herehere