一個簡易的日誌打印框架(支持打印策略自定義,默認提供2種策略:logcat打印和磁盤打印)android
IFormatStrategy
和打印策略ILogStrategy
。打印debug信息和json日誌 git
打印xml信息 github
打印出錯信息 json
打印debug信息和json日誌 api
打印xml信息 bash
打印出錯信息 框架
目前支持主流開發工具AndroidStudio的使用,直接配置build.gradle,增長依賴便可.maven
1.先在項目根目錄的 build.gradle 的 repositories 添加:ide
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
複製代碼
2.而後在dependencies添加:svg
dependencies {
...
implementation 'com.github.xuexiangjys:XLog:1.1.3'
}
複製代碼
在Application中初始化
XLog.init(this);
複製代碼
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);
複製代碼
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); //打印錯誤信息
}
複製代碼
咱們在使用第三方庫時,不免須要打印顯示第三方庫的日誌到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);
複製代碼
目前提供兩種默認的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