背景
最近看了幾個日志框架,最后發(fā)現(xiàn)Logger
擴展性最好晓铆,顯示效果也非常整齊勺良,但Logger
每個日志都是最少分為兩部分顯示(頭部+日志內(nèi)容)
绰播,連上分割線最少顯示五行,在日志很多的時候尚困,會極為占空間蠢箩,基于該原因,在該庫的基礎(chǔ)上進(jìn)行了一些修改事甜,整理了一個可以精簡顯示日志的庫谬泌,并擴展了一些其他功能,使用方式和原Logger
庫幾乎一致逻谦。
介紹
項目地址:https://github.com/naturs/Logger
其中參考的庫主要包括:
https://github.com/orhanobut/logger
https://github.com/ZhaoKaiQiang/KLog
https://github.com/JakeWharton/timber
https://github.com/pengwei1024/LogUtils
該庫除了原Logger
庫的特點以外掌实,還包括以下特性:
- 將項目更改為Java工程,可以在Java平臺上輸出日志邦马;
- 支持顯示簡化的日志信息贱鼻;
- 添加了對Collection、Map滋将、多維數(shù)組邻悬、Intent、Bundle的格式化輸出随闽;
- 支持指定調(diào)用方法棧父丰;
- 大部分實現(xiàn)都能更改和替換;
使用方式
添加依賴
如果是Java平臺掘宪,僅需添加核心依賴:
compile 'com.github.naturs.logger:logger-core:0.3'
如果是Android平臺蛾扇,還可以添加以下依賴攘烛,主要添加了對Intent、Bundle的格式化輸出镀首,以及Logcat日志顯示支持:
compile 'com.github.naturs.logger:logger-android:0.3'
初始化
使用該庫之前医寿,需要進(jìn)行初始化,主要是針對全局進(jìn)行一些設(shè)置蘑斧。
如果是Java平臺靖秩,可以進(jìn)行如下初始化操作:
// 以System.out.println()的方式輸出日志
Logger.addLogAdapter(new DefaultLogAdapter("Your Global Tag"));
Logger.setLogConverter(new DefaultLogConverter());
這兩個方法的作用分別為:
Logger.addLogAdapter()
:
添加日志顯示及輸出方式,顯示由DefaultLogAdapter
中的成員變量FormatStrategy
控制竖瘾,它的作用主要是格式化日志沟突,比如添加分割線、添加Log行數(shù)等捕传,最后將格式化后的日志通過LogStrategy
輸出惠拭,比如DefaultLogAdapter
默認(rèn)的日志輸出方式為DefaultLogStrategy
,即使用System.out.println()
輸出庸论。
我們可以添加多個LogAdapter
职辅,比如部分日志需要輸出到文件,我們就可以自定義一個記錄到文件的LogAdapter
聂示,添加進(jìn)來即可域携。
Logger.setLogConverter()
:
添加Log轉(zhuǎn)換方式,比如將Map鱼喉、Intent這樣的對象轉(zhuǎn)換成一個格式化后的字符串秀鞭,由于默認(rèn)帶有多個Converter,這里使用LogConverter進(jìn)行統(tǒng)一管理扛禽,同時方便外部調(diào)用锋边。
最終Log輸出方式為:
Logger -> ConverterStrategy(轉(zhuǎn)換格式) -> LogAdapter -> FormatStrategy(添加額外信息并格式化) -> LogStrategy(輸出)
如果是Android平臺,可以進(jìn)行如下初始化操作:
Logger.addLogAdapter(new AndroidLogAdapter("Your Global Tag"));
Logger.setLogConverter(new AndroidLogConverter());
功能和上面Java初始化方式一致编曼。
使用
1豆巨、簡單使用方式:
Logger.d("message");
Logger.i("message");
Logger.e(Throwable);
調(diào)用時會采用調(diào)用者的類名作為Tag,如果在初始化時指定了全局Tag掐场,最終的Tag為:GlobalTag-YourTag
往扔。
2、如果要自定義Tag:
Logger.tag("your tag").d("message");
3刻肄、如果要輸出格式化后的json或xml:
Logger.json(json);
Logger.xml(xml);
4瓤球、如果要輸出格式化后的對象:
Logger.obj(object);
目前Object類型支持Collection
、Map
敏弃、多維數(shù)組
卦羡、Bundle
、Intent
,同時你也可以自定義Object轉(zhuǎn)換方式:
- 實現(xiàn)
ConverterStrategy
接口绿饵; - 在初始化時通過
Logger.addConverterStrategy()
方法加進(jìn)去欠肾;
5、如果你需要對Logger
再進(jìn)行一層封裝拟赊,你可以寫成這樣:
public class LogUtils {
public static void d(String msg) {
Logger.d(msg);
}
}
但調(diào)用LogUtils.d()
方法時刺桃,Tag和最終顯示的方法行數(shù)都會從LogUtils.java
中獲取,也就是沒法獲取到調(diào)用LogUtils.d()
方法的類的信息吸祟,這里可以稍作修改:
public class LogUtils {
public static void d(String msg) {
Logger.invokeClass(LogUtils.class).d(msg);
}
}
invokeClass()
方法指定的是調(diào)用Logger的那個類瑟慈,如果不指定則為當(dāng)前類。