1. 程式人生 > >Logger 超簡單的 Android 日誌輸出工具

Logger 超簡單的 Android 日誌輸出工具

如要了解功能實現,請執行app程式檢視控制檯日誌和原始碼!
* 原始碼 : AcmenXD/Logger
* apk下載路徑 : Logger.apk

依賴

  • AndroidStudio
    allprojects {
            repositories {
                ...
                maven { url 'https://jitpack.io' }
            }
    }
     compile 'com.github.AcmenXD:Logger:1.3'

功能

  • 設定Logger開關
  • 設定Logger顯示級別
  • 支援java任意型別的日誌輸出,不在侷限於String型別
  • 支援Throwable日誌格式化輸出
  • 支援json格式輸出
  • 支援xml格式輸出
  • 支援日誌追加到本地檔案
  • 支援Android Monitor中點選日誌,跳轉到呼叫程式碼位置

配置

在Application中配置

/**
 * 初始化
 * context必須設定
 */
Logger.setContext(context);
/**
 * 設定Log開關,可根據debug-release配置
 *  預設為true
 */
Logger.setOpen(false);
/**
 * 設定Log等級, >= 這個配置的log才會顯示
 * 預設為Log.VERBOSE = 2
 */
Logger.setLevel(Log.VERBOSE); /** * 設定本地Log日誌的儲存路徑 * 預設為sd卡Logger目錄下 * Environment.getExternalStorageDirectory().getAbsolutePath() + "/Logger/" */ Logger.setPath(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Log/");

使用 -> 以下程式碼 註釋很詳細、很重要很重要很重要!!!

/**
 * v可替換成d/i/w/e/a,對應不同等級的日誌
 * test可替換成java任意型別
 */
Logger.v("test");
// MainActivity.java:28 可點選跳轉到對應程式碼行
V/com.acmenxd.logger.demo.MainActivity.java:╔═════════════════════════════════════════════════════════════════════════════════════════
V/com.acmenxd.logger.demo.MainActivity.java:║ * [ Logger -=(MainActivity.java:28)=- OnCreate ]
V/com.acmenxd.logger.demo.MainActivity.java:║   test
V/com.acmenxd.logger.demo.MainActivity.java:╚═════════════════════════════════════════════════════════════════════════════════════════
/**
 * 支援任意多個引數+多型別
 */
Logger.d("test1", true);
V/com.acmenxd.logger.demo.MainActivity.java:╔═════════════════════════════════════════════════════════════════════════════════════════
V/com.acmenxd.logger.demo.MainActivity.java:║ * [ Logger -=(MainActivity.java:29)=- OnCreate ]
V/com.acmenxd.logger.demo.MainActivity.java:║   param[0] =  test1
V/com.acmenxd.logger.demo.MainActivity.java:║   param[1] =  test2
V/com.acmenxd.logger.demo.MainActivity.java:╚═════════════════════════════════════════════════════════════════════════════════════════
/**
 * 自定義Tag需藉助LogTag.mk函式定義
 */
Logger.i(LogTag.mk("MainActivity"), "test1", "test2");
I/MainActivity:╔═════════════════════════════════════════════════════════════════════════════════════════
I/MainActivity:║ * [ Logger -=(MainActivity.java:30)=- OnCreate ]
I/MainActivity:║    param[0] =  test1
I/MainActivity:║    param[1] =  test2
I/MainActivity:╚═════════════════════════════════════════════════════════════════════════════════════════
/**
 * 直接傳遞異常
 */
Logger.e(new NullPointerException());
W/com.acmenxd.logger.demo.MainActivity.java:╔═════════════════════════════════════════════════════════════════════════════════════════
W/com.acmenxd.logger.demo.MainActivity.java:║ * [ Logger -=(MainActivity.java:31)=- OnCreate ]
W/com.acmenxd.logger.demo.MainActivity.java:║ * Throwable Message Start ====================
W/com.acmenxd.logger.demo.MainActivity.java:║   com.acmenxd.logger.demo.MainActivity.onCreate(MainActivity.java:31)
W/com.acmenxd.logger.demo.MainActivity.java:║   android.app.Activity.performCreate(Activity.java:6303)
W/com.acmenxd.logger.demo.MainActivity.java:║   android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
W/com.acmenxd.logger.demo.MainActivity.java:║   android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2398)
W/com.acmenxd.logger.demo.MainActivity.java:║   android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2505)
W/com.acmenxd.logger.demo.MainActivity.java:║   android.app.ActivityThread.access$1000(ActivityThread.java:153)
W/com.acmenxd.logger.demo.MainActivity.java:║   android.app.ActivityThread$H.handleMessage(ActivityThread.java:1369)
W/com.acmenxd.logger.demo.MainActivity.java:║   android.os.Handler.dispatchMessage(Handler.java:102)
W/com.acmenxd.logger.demo.MainActivity.java:║   android.os.Looper.loop(Looper.java:154)
W/com.acmenxd.logger.demo.MainActivity.java:║   android.app.ActivityThread.main(ActivityThread.java:5466)
W/com.acmenxd.logger.demo.MainActivity.java:║   java.lang.reflect.Method.invoke(Native Method)
W/com.acmenxd.logger.demo.MainActivity.java:║   com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
W/com.acmenxd.logger.demo.MainActivity.java:║   com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
W/com.acmenxd.logger.demo.MainActivity.java:║ * Throwable Message End ====================
W/com.acmenxd.logger.demo.MainActivity.java:╚═════════════════════════════════════════════════════════════════════════════════════════
/**
 * 更多支援
 */
Logger.e(LogTag.mk("MainActivity"), new NullPointerException());
Logger.e(new NullPointerException(), "test1", "test2");
Logger.a(LogTag.mk("MainActivity"), new NullPointerException(), "test1", "test2");
  • json格式輸出
/**
 * json格式輸出
 */
Logger.json(LogTag.mk("jsonMainActivity"), json.toString());
W/jsonMainActivity:╔═════════════════════════════════════════════════════════════════════════════════════════
W/jsonMainActivity:║ * [ Logger -=(MainActivity.java:50)=- OnCreate ]
W/jsonMainActivity:║ {
W/jsonMainActivity:║     "sys_time": 1481635515074,
W/jsonMainActivity:║     "data": {
W/jsonMainActivity:║         "total": 4,
W/jsonMainActivity:║         "record": [
W/jsonMainActivity:║             {
W/jsonMainActivity:║                 "amount": 1236302,
W/jsonMainActivity:║                 "create_time": 0,
W/jsonMainActivity:║                 "reality_name": "陳**",
W/jsonMainActivity:║                 "user_id": 0,
W/jsonMainActivity:║             },
W/jsonMainActivity:║             {
W/jsonMainActivity:║                 "amount": 1236302,
W/jsonMainActivity:║                 "create_time": 0,
W/jsonMainActivity:║                 "reality_name": "陳**",
W/jsonMainActivity:║                 "user_id": 0,
W/jsonMainActivity:║             }
W/jsonMainActivity:║         ],
W/jsonMainActivity:║         "prevPn": 0,
W/jsonMainActivity:║         "totalPage": 1
W/jsonMainActivity:║     },
W/jsonMainActivity:║     "code": 0,
W/jsonMainActivity:║     "msg": ""
W/jsonMainActivity:║ }
W/jsonMainActivity:╚═════════════════════════════════════════════════════════════════════════════════════════
  • xml格式輸出
/**
 * xml格式輸出
 */
Logger.xml(LogTag.mk("xmlMainActivity"), xml.toString());
W/xmlMainActivity:╔═════════════════════════════════════════════════════════════════════════════════════════
W/xmlMainActivity:║ * [ Logger -=(MainActivity.java:66)=- OnCreate ]
W/xmlMainActivity:║     <?xml version="1.0" encoding="utf-8"?>
W/xmlMainActivity:║     <manifest xmlns:android="http://schemas.android.com/apk/res/android"
W/xmlMainActivity:║               package="com.acmenxd.logger.demo">
W/xmlMainActivity:║         <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
W/xmlMainActivity:║         <application
W/xmlMainActivity:║             android:name=".BaseApplication"
W/xmlMainActivity:║             android:allowBackup="true"
W/xmlMainActivity:║             android:icon="@mipmap/ic_launcher"
W/xmlMainActivity:║             android:label="@string/app_name"
W/xmlMainActivity:║             android:supportsRtl="true"
W/xmlMainActivity:║             android:theme="@style/AppTheme">
W/xmlMainActivity:║             <activity android:name=".MainActivity">
W/xmlMainActivity:║                 <intent-filter>
W/xmlMainActivity:║                     <action android:name="android.intent.action.MAIN"/>
W/xmlMainActivity:║                     <category android:name="android.intent.category.LAUNCHER"/>
W/xmlMainActivity:║                 </intent-filter>
W/xmlMainActivity:║             </activity>
W/xmlMainActivity:║         </application>
W/xmlMainActivity:║     </manifest>
W/xmlMainActivity:╚═════════════════════════════════════════════════════════════════════════════════════════
  • 輸出到本地檔案
/**
 * 日誌輸出到本地檔案(預設路徑通過Logger.setPath函式配置)
 * 如未配置路徑,預設路徑為sd卡Log目錄下
 * 如未配置日誌檔名,預設生成規則:(Log_ + 年月日時分秒 + 5位數的隨機數 -> Log_2017032318065140848.txt)
 */
// 支援任意多個引數+多型別
Logger.file(new NullPointerException(), "test1", "test2");
// 自定義Tag需藉助LogTag.mk函式定義
Logger.file(LogTag.mk("fileMainActivity"), new NullPointerException(), "test1", "test2");
// 指定本地日誌檔名
Logger.file(LogTag.mk("fileMainActivity"), "LogTest.txt", new NullPointerException(), "test1", "test2");
// 指定本地日誌檔名 + 儲存路徑
Logger.file(LogTag.mk("fileMainActivity"), "LogTest.txt", dir, new NullPointerException(), "test1", "test2");
E/com.acmenxd.logger.demo.MainActivity.java:╔═════════════════════════════════════════════════════════════════════════════════════════
E/com.acmenxd.logger.demo.MainActivity.java:║ * [ Logger -=(MainActivity.java:72)=- OnCreate ]
E/com.acmenxd.logger.demo.MainActivity.java:║ save log success ! location is >> /storage/emulated/0/Log/Log_2017032318065140848.txt
E/com.acmenxd.logger.demo.MainActivity.java:╚═════════════════════════════════════════════════════════════════════════════════════════

END