XLog 一個簡易的日誌打印框架

XLog

xl
api

一個簡易的日誌打印框架(支持打印策略自定義,默認提供2種策略:logcat打印和磁盤打印)android

關於我

github
csdn

特色

  • 支持自定義日誌格式策略IFormatStrategy和打印策略ILogStrategy
  • 提供默認的兩種日誌打印方式:logcat(PrettyFormatStrategy)和磁盤打印(PrettyFormatStrategy)。
  • 兼容android logcat,VERBOSE、DEBUG、INFO、WARN、ERROR和WTF全都有,一個都不能少
  • 突破了logcat的4000字長度限制
  • 支持打印xml,json,模版String等形式。
  • 支持自定義日誌文件存儲形式(文件前綴、時間片存儲等)。
  • 在日誌文件的頂部,XLog提供了不少有用的運行環境相關的信息,好比操做系統信息、設備信息和應用信息
  • 支持時區設置。
  • 支持日誌文件信息可選擇打印。
  • 支持打印線程信息。
  • 支持打印方法的數量。
  • 支持捕捉並打印崩潰日誌。
  • 支持自定義崩潰日誌處理。
  • 支持第三方打印接口適配。

一、演示(請star支持)

1.一、logcat打印效果

  1. 打印debug信息和json日誌 git

    打印debug信息和json日誌

  2. 打印xml信息 github

    打印xml信息

  3. 打印出錯信息 json

    打印出錯信息

1.二、磁盤打印效果

  1. 打印debug信息和json日誌 api

    打印debug信息和json日誌

  2. 打印xml信息 bash

    打印xml信息

  3. 打印出錯信息 框架

    打印出錯信息

二、如何使用

目前支持主流開發工具AndroidStudio的使用,直接配置build.gradle,增長依賴便可.maven

2.一、Android Studio導入方法,添加Gradle依賴

1.先在項目根目錄的 build.gradle 的 repositories 添加:ide

allprojects {
     repositories {
        ...
        maven { url "https://jitpack.io" }
    }
}
複製代碼

2.而後在dependencies添加:svg

dependencies {
   ...
   implementation 'com.github.xuexiangjys:XLog:1.1.3'
}
複製代碼

2.二、初始化

在Application中初始化

XLog.init(this);
複製代碼

2.三、構建Logger

1.構建一個Logger須要一個日誌格式化策略IFormatStrategy和一個日誌打印策略ILogStrategy

其中,日誌格式化策略IFormatStrategy應當持有日誌打印策略ILogStrategy。而Logger持有日誌格式化策略。

  • XLog負責全局日誌Logger的調度。

  • Logger負責對外提供日誌打印的能力(API)。

  • IFormatStrategy負責對日誌內容進行格式化顯示處理。

  • ILogStrategy負責進行具體的日誌打印。

日誌打印的流程以下:

XLog -> Logger -> IFormatStrategy -> ILogStrategy
複製代碼

下面是自定義構建一個磁盤打印Logger的方法:

ILogStrategy diskLogStrategy = DiskLogStrategy.newBuilder()       //日誌打印策略
        .setLogDir("xlogDemo")                                    //設置日誌文件存儲的根目錄
        .setLogPrefix("xlog")                                     //設置日誌文件名的前綴
        .setLogSegment(LogSegment.FOUR_HOURS)                     //設置日誌記錄的時間片間隔
        .setLogLevels(LogLevel.ERROR, LogLevel.DEBUG)             //設置日誌記錄的等級
        .build();
IFormatStrategy formatStrategy = DiskFormatStrategy.newBuilder()  //日誌格式策略
        .setShowThreadInfo(false)                                 //設置是否顯示線程信息
        .setTimeFormat(TimeUtils.LOG_LINE_TIME)                   //設置日誌記錄時間的時間格式
        .setMethodCount(1)                                        //設置打印顯示的方法數
        .setLogStrategy(diskLogStrategy)                          //設置日誌打印策略
        .build();
Logger.newBuilder("DiskLogger")
        .setFormatStrategy(formatStrategy)                        //設置日誌格式策略
        .build();
複製代碼

2.簡約的日誌Logger構建方法。

爲了方便Logger的構建,我提供了Logger靜態生產工廠LoggerFactory。它包含了幾種經常使用的Logger構造方法。

  • getLogger:獲取自定義拼裝的logger

  • getPrettyLogger: 獲取漂亮的logger【打印方式是logcat】

  • getPrettyFormatStrategy: 獲取漂亮的日誌打印格式

  • getDiskLogStrategy: 獲取磁盤打印的打印策略

  • getDiskFormatStrategy: 獲取磁盤打印的格式策略

  • getSimpleDiskFormatStrategy: 獲取簡化的磁盤打印的格式策略

  • getSimpleDiskLogger: 獲取簡化的磁盤打印的logger

下面是使用LoggerFactory構建的一個磁盤打印Logger:

DiskLogStrategy diskLogStrategy = LoggerFactory.getDiskLogStrategy(
        "xlogDemo", "xlog", LogLevel.ERROR, LogLevel.DEBUG
);
LoggerFactory.getSimpleDiskLogger("DiskLogger", diskLogStrategy, 0);
複製代碼

2.四、日誌記錄

UserInfo userInfo = new UserInfo().setLoginName("xuexiang").setPassword("12345678");
String json = new Gson().toJson(userInfo);

XLog.get().d(json);                   //打印debug日誌
XLog.get().json(json);                //打印json信息
XLog.get().xml(ResourceUtils.readStringFromAssert(this, "AndroidManifest.xml"));    //打印xml

try {
    throw new NullPointerException("出錯啦!");
} catch (Exception e) {
    XLog.get().e(e);     //打印錯誤信息
}
複製代碼

2.五、第三方日誌接口適配

咱們在使用第三方庫時,不免須要打印顯示第三方庫的日誌到Logcat或者磁盤,那這個時候該怎麼辦呢?

這個時候就可使用Logger的log方法進行接口適配。

//適配第三方日誌打印接口
Logger.setLogger(new ILogger() {
    @Override
    public void log(int priority, String tag, String message, Throwable t) {
        XLog.get().getLogger("LogUtils").log(LoggerFactory.logPriority2LogLevel(priority), tag, message, t);
    }
});
複製代碼

log方法的接口以下:

/**
 * 日誌打印【提供具體日誌打印的功能】
 *
 * @param level     日誌打印等級
 * @param tag       日誌標籤
 * @param message   日誌的信息
 * @param throwable 錯誤信息
 */
void log(@LogLevel String level, String tag, String message, Throwable throwable);
複製代碼

2.六、程序崩潰Crash處理

目前提供兩種默認的Crash處理:

  • ToastCrashListener:簡單的toast提示 + 程序自動啓動。

  • SendEmailCrashListener:發送崩潰日誌郵件。

CrashHandler.getInstance().setOnCrashListener(new ToastCrashListener());
CrashHandler.getInstance().setOnCrashListener(new SendEmailCrashListener());
複製代碼

固然,你也能夠實現你本身的崩潰Crash處理,只須要實現OnCrashListener接口便可。

特別感謝

https://github.com/orhanobut/logger

https://github.com/JiongBull/jlog

聯繫方式

qq交流羣
相關文章
相關標籤/搜索