Android日誌架構darks-logs使用教程

來源:互聯網
上載者:User

        darks-logs是一款Android、JAVA、WEB通用的日誌組件,它的配置方式類似於log4j,但是它具有更加輕量級、易用性更高、高擴充性、支援移動端等特點。根據官網所述,它的最初設計目標是為JAVA、WEB應用與移動端的互相移植提供統一有效日誌組件庫。

項目開源地址

項目發布地址
一、設定檔

       在使用darks-logs之前,我們需要為它建立一個名叫logd.properties的設定檔。如果你是需要在JAVA或WEB上使用該組件,那麼你可以像配置log4j一樣將它放在classpath中。

       如果是在Android端使用該組件,你需要將logd.properties檔案放置在assets目錄中,以便能讓組件找到它。在放置了logd.properties檔案後,為了能讓組件擷取到assets目錄中的設定檔,需要在Android的Application中進行相關的設定。如果需要日誌輸出捕獲的Android應用ANR異常資訊,也需要在Application中註冊ANR異常處理器。

public class CustomApplication extends Application{      @Override      public void onCreate()      {  //首先必須設定Application對象          Logger.Android.setApplication(this);  //註冊ANR錯誤處理器          Logger.Android.registerCrashHandler();          super.onCreate();      }}
如果希望Android應用在捕獲到ANR異常後,能回調執行相關的代碼,可以在registerCrashHandler方法中設定CallBack。

Logger.Android.registerCrashHandler(new CallBack(){      @Override      public boolean handleMessage(Message msg)      {   //發生ANR異常時執行           new Thread()           {               public void run()               {                    Looper.prepare();                    Toast.makeText(CustomApplication.this, "The crash has happened.", Toast.LENGTH_LONG).show();                    Looper.loop();               }           }.start();           Thread.sleep(3000);           return true;      }  });

預設的設定檔載入器會從Java的classpath以及Android的assets中載入設定檔,如果你需要從其他特別的地方載入設定檔(例如sdcard、raw等等) 。你可以自訂載入器,並通過Logger.Config.setCustomLoader(...)進行設定。在後續版本中會增加載入路徑的自訂設定,從而不需要自訂載入器,除非你有特別需求。

二、簡單使用

在完成設定檔的放置及必要的參數配置後,我們就可以向設定檔中添加配置參數了。

我們先簡單的向logd.properties中添加一個控制台Tlog器。

logd.root=info,console#logd.appender.console=darks.log.appender.impl.ConsoleAppenderlogd.appender.console=ConsoleAppenderlogd.appender.console.layout=PatternLayoutlogd.appender.console.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} - %m%n
然後我們在JAVA類中建立一個logger,為了提高效率建議設定成static變數。

static Logger log = Logger.getLogger(TestLogger.class);static Logger log = Logger.getLogger("darks.logs.test.TestLogger");static Logger log = Logger.getLogger("TestLogger");
之後我們可以通過多種方式輸出不同記錄層級的日誌資訊。

log.debug("This is the darks logs hello world.");log.info("Info message will be output");log.error("Happen a exception. Cause " + e.getMessage(), e);
如果你需要進行比較多的字串拼接,或者對部分日誌資訊進行格式化。這樣的輸出方式可以提高一部分效率。

log.append("darks").append('-').append("logs").info();log.append(2014).append(1).append(1).debug(e);log.buffer(2014, " coming ", "now").warn();log.format("darks-logs was created in %d by %s", 2014, "darks").error(e);log.append("...").append("...").format("...", ...).info();

三、日誌訊息格式化 在簡單使用中我們設定了一個控制台日誌輸出器,其中配置了

logd.appender.console.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} - %m%n
這段配置資訊是為了配置當前訊息輸出器的日誌格式。相關的格式定義如下。

%n, %N: 輸出一個斷行符號字元。%m, %M: 輸出訊息內容。(也包括異常棧資訊)%e, %E: 輸出錯誤異常棧資訊。%d, %D: 輸出日期格式資訊,例如 "%d{yyyy-MM-dd HH:mm:ss}".%c:     輸出命名空間或者tags.我們可以使用%c{層數}來輸出命名空間中指定的資訊。        例如%c{1},如果命名空間是 darks.log.DemoMain,那麼它會輸出DemoMain。%C:     輸出類名.你也可以使用%C{層數}的方式來輸出類名的指定層數。        例如%C{2},如果類全名是darks.log.DemoMain,那麼它會輸出log.DemoMain。%f, %F: 輸出源檔案名稱。%L:     輸出原始碼行數。%l:     輸出時間資訊。包括調用類,線程名,源檔案名稱以及程式碼數。%p, %P: 輸出記錄層級。%r, %R: 輸出從啟動到現在的消耗時間。%t, %T: 輸出當前線程名。

例如:
logd.appender.console.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} [%f][%p] - %m%nlogd.appender.console.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %c{2} - %m%n

四、訊息處理器       Appender是所有訊息處理器的基類,它可以配置layout、filter等等,你可以通過繼承該類去自訂化輸出,比如將日誌輸出到Android的UI上。

1、layout

      layout主要用來格式化訊息,你可以使用內建的darks.log.PatternLayout, darks.log.SimpleLayout等layout,你甚至可以繼承LoggerLayout自訂實現layout。

PatternLayout能夠靈活的通過輸出格式輸出日誌資訊。例如%d{yyyy-MM-dd HH:mm:ss} %c{1} - %m%n。
SimpleLayout能夠輸出較為簡單的日誌I型逆襲。例如:level - message
2、filter       filter能夠通過指定的規則過濾日誌訊息。

  LevelRangeFilter能夠輸出最小等級與最大等級之間的日誌訊息。

#它將會輸出debug與info等級之間的訊息logd.appender.console=ConsoleAppenderlogd.appender.console.layout=PatternLayoutlogd.appender.console.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} - %m%nlogd.appender.console.filter=LevelRangeFilterlogd.appender.console.filter.levelMin=debuglogd.appender.console.filter.levelMax=infologd.appender.console.filter.accept=true
RegexMatchFilter能夠輸出匹配指定的Regex的日誌訊息。
#它將會輸出匹配Regexdarks\d+的日誌訊息logd.appender.console=ConsoleAppenderlogd.appender.console.layout=PatternLayoutlogd.appender.console.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} - %m%nlogd.appender.console.filter=RegexMatchFilterlogd.appender.console.filter.pattern=darks\d+logd.appender.console.filter.accept=true

LevelMatchFilter能夠輸出制定日誌等級的訊息日誌。多個等級之間用逗號隔開。
#它將會輸出debug以及info層級的訊息日誌logd.appender.console=ConsoleAppenderlogd.appender.console.layout=PatternLayoutlogd.appender.console.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} - %m%nlogd.appender.console.filter=LevelMatchFilterlogd.appender.console.filter.levels=debug,infologd.appender.console.filter.accept=true
3、async  設定了async的Tlog器能夠非同步將日誌訊息輸出到Tlog器中。
logd.appender.console.async=true

五、各類訊息處理器 1、ConsoleAppender ConsoleAppender能夠輸出日誌訊息到命令控制台。
logd.appender.console=ConsoleAppenderlogd.appender.console.layout=PatternLayoutlogd.appender.console.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} - %m%n

2、AndroidAppender AndroidAppender能夠輸出訊息到Android的logcat。
logd.appender.ANDROID=AndroidAppender#輸出命名空間的指定層數作為logcat的TAG。預設為1.logd.appender.ANDROID.layer=1logd.appender.ANDROID.layout=PatternLayoutlogd.appender.ANDROID.layout.pattern=%m

3、StreamAppender StreamAppender是流式輸出的基礎類。你不能直接的使用它,而是必須建立一個繼承於它的類去實現流式的輸出。你能夠使用它將訊息輸出到檔案、網路等地方。
public class CustomAppender extends StreamAppender{      @Override      public void activateHandler()      {          //會在第一次啟用時調用,你可以用他建立檔案或者初始化IO流等。      }        @Override      protected void expandAppend(LogMessage msg, String log) throws Exception      {          //在這裡做日誌的擴充處理,比如檢查檔案大小等等      }}

4、SocketAppender SocketAppender能夠通過TCP協議輸出日誌訊息到服務端。它繼承於StreamAppender。
logd.appender.SOCKET=SocketAppenderlogd.appender.SOCKET.layout=PatternLayoutlogd.appender.SOCKET.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} - %m%n#服務端IPlogd.appender.SOCKET.serverHost=127.0.0.1#服務端連接埠logd.appender.SOCKET.serverPort=8686#保持alivelogd.appender.SOCKET.keepAlive=truelogd.appender.SOCKET.tcpNoDelay=true#用頭位元組封裝訊息,它會給傳輸的日誌訊息加上前置標識以及訊息長度。logd.appender.SOCKET.wrapBytes=true

5、FileAppender FileAppender能夠輸出日誌訊息到檔案。它繼承於StreamAppender。如果你想建立動態檔案名稱,你可以使用${PROPERTY_VARIABLE}獲得System.getProperty的值。如果你想獲得Android的SDCARD目錄,你可以通過${sdcard}去獲得sdcard的絕對路徑。如果你想在檔案名稱上加上日期或者時間,你可以使用${D[日期格式]},例如${Dyyyy_MM_dd_HH_mm_ss}。
logd.appender.FILE=FileAppenderlogd.appender.FILE.layout=PatternLayoutlogd.appender.FILE.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} - %m%nlogd.appender.FILE.fileName=${user.dir}\log_${Dyyyy_MM_dd_HH_mm_ss_SS}.txt#logd.appender.FILE.fileName=${sdcard}/log_${Dyyyy_MM_dd_HH_mm_ss_SS}.txtlogd.appender.FILE.buffered=true.

6、FileDateSizeAppender FileDateSizeAppender能夠保證記錄檔在指定的大小及日期範圍內。它的記錄檔預設保留時間為7天,它的預設保留大小為10MB,如果超出指定大小將建立一個記錄檔。它的相關屬性繼承於FileAppender。
logd.appender.FILE=FileDateSizeAppenderlogd.appender.FILE.layout=PatternLayoutlogd.appender.FILE.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} - %m%nlogd.appender.FILE.fileName=${user.dir}\log_${Dyyyy_MM_dd_HH_mm_ss_SS}.txtlogd.appender.FILE.buffered=truelogd.appender.FILE.maxSize=10485760logd.appender.FILE.keepDay=7

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.