Log日志打印框架:
主要介绍二个框架分别为:
1. Klog
2. Logger
Klog:
https://github.com/ZhaoKaiQiang/KLog
KLog目前功能:
- 支持显示行号
- 支持显示Log所在函数名称
- 支持无Tag快捷打印
- 支持在Android Studio开发IDE中,点击函数名称,跳转至Log所在位置
- 支持JSON字符串解析打印
- 支持XML字符串解析打印
- 支持Log信息存储到文件
- 依赖库非常小,只有不到10K
- 支持无限长字符串打印,无Logcat4000字符限制
- 支持变长参数,任意个数打印参数
- 支持设置全局Tag
引入
dependencies {
compile 'com.github.zhaokaiqiang.klog:library:1.6.0'
}
初始化
Log发布版关闭,开发板打开,配置:
android {
buildTypes {
release {
minifyEnabled false
buildConfigField “boolean”,”LOG_DEBUG”,”false”
proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’
}
debug {
buildConfigField “boolean”, “LOG_DEBUG”, “true”
}
}
}
其中buildConfigField “boolean”,”LOG_DEBUG”,”false”
false是关闭,true为打开
在Application中
KLog.init(BuildConfig.LOG_DEBUG);
用法
- KLog.v()
- KLog.i()
- KLog.w()
- KLog.e()
- KLog.a()
- KLog.d()
KLog.d()
使用无参数的方法,会简单的打印”execute”,默认Tag是当前类的名称
KLog.d(String)
使用这个方法,可以正常打印,默认Tag是当前类的名称
KLog.d(Tag,String)
这个方法和我们最常用的一样
KLog.json(String)
使用这个方法可以打印JSON格式的字符串,Tag默认为当前类的名称
KLog.json(Tag,String)
和上面的一样,只不过Tag自己指定
如何设置Log的颜色
如下,需要“Save as”保存主题,然后取消“use inherited attributes”,即可设置自己想要的颜色
Logger*
参考:https://blog.csdn.net/pzm1993/article/details/78264994
https://github.com/orhanobut/logger
logger作为调试框架,可以支持多种格式
- 线程的信息类、方法的信息
- 格式化将 json、xml 输出
- 支持字符串格式参数
- 各种集合输出,list、map、array、set等,(只支持debug输出)
- 支持从日志跳转到源码
引入:
implementation 'com.orhanobut:logger:2.2.0'
修改默认配置:
最新版修改配置,和旧版也是有不同,如下:
FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder()
.showThreadInfo(false) //(可选)是否显示线程信息。 默认值为true
.methodCount(2) // (可选)要显示的方法行数。 默认2
.methodOffset(7) // (可选)设置调用堆栈的函数偏移值,0的话则从打印该Log的函数开始输出堆栈信息,默认是0
.logStrategy(customLog) //(可选)更改要打印的日志策略。 默认LogCat
.tag("MyTAG") //(可选)每个日志的全局标记。 默认PRETTY_LOGGER(如上图)
.build();
Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));
具体配置大家可以自行去实践下。一般默认就可以了,这里说下,修改全局的TAG,和局部的TAG。
1.修改全局的TAG,在初始化的application中修改,如:
FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder()
.tag("MyTAG")
.build();
Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));
public void testNormal(){
Logger.t("hello").d("DEBUG日志");
Logger.i("INFO日志");
}
注:如果尝试用局部的方法,在application初始化时修改。当然,这是有效果的,但只能用一次,其他打印还是会用全局的,可自行测试。
初始化:
Logger.addLogAdapter(new AndroidLogAdapter());
注:如果在Application中初始化,记得修改 AndroidManifest.xml 中 application 标签属性,添加 android:name=".MyApplication" ,不然不会打印。
输出样式:
使用:
Logger.d(“hello”);
支持的数据类型
普通类型
public void testNormal(){
Logger.d("DEBUG日志");
Logger.i("INFO日志");
Logger.e("ERROR日志");
}
Format类型
public void testFormat(){
Logger.d("hello %s, luck number is %d", "world", 5);
}
集合类型
首先看看List:
List list = new ArrayList();
list.add("hello");
list.add("world");
Logger.d(list);
使用该框架,可以直接支持打印,其他数据类型也一样。如果是使用系统Log打印的话,需要加toString变成string类型才可以
Log.d(TAG, list.toString());
其他的数据结构也是一样的:
public void testCollections(){
/**
* Map
*/
Map map = new HashMap();
map.put("map1","hello");
map.put("map2","world");
Logger.d(map);
/**
* Set
*/
Set set = new HashSet();
set.add("hello");
set.add("world");
Logger.d(set);
/**
* Array
*/
String [] strs = {"hello", "world"};
Logger.d(strs);
}
注:打印集合的时候,特别是数组时,前面不要添加其他字符,如:Logger.d(“数组集合”+strs);这样会把整体当做一个参数,导致判断错误,不能正常输出数组类型。其次是,作者提示,打印集合时,使用DEBUG等级。
JSON数据
public void testJson(){
String jsonDate = "{\"id\":859,\"channelnumber\":681,\"bilingual\":0,\"name\":\"beIN Sports 2 English 600K H265\",\n" +
" \"language\":\"EN\",\n" +
" \"videotype\":\"MPEG2\",\"audiotype\":\"MPEP1\",\"callsign\":\"beIN Sports 2 English 600K H265\",\"country\":\"cn\"};";
Logger.json(jsonDate);
Log.d(TAG, jsonDate);
}
与系统Log的打印区别如图:
XML数据
public void testXml() {
String xmlDate = "<province id=\"01\" name=\"北京\"> \n" +
" <city id=\"0101\" name=\"北京\"> \n" +
" <county id=\"010101\" name=\"北京\" weatherCode=\"101010100\"/> \n" +
" <county id=\"010102\" name=\"海淀\" weatherCode=\"101010200\"/> \n" +
" <county id=\"010103\" name=\"朝阳\" weatherCode=\"101010300\"/> \n" +
" <county id=\"010110\" name=\"石景山\" weatherCode=\"101011000\"/> \n" +
" </city> \n" +
" </province> ";
Logger.xml(xmlDate);
Log.d(TAG, xmlDate);
}
控制打印开关
Logger.addLogAdapter(new AndroidLogAdapter() {
@Override public boolean isLoggable(int priority, String tag) {
return BuildConfig.DEBUG;
}
});
保存log到文件
有时需要将log保存起来,再进一步分析,那么,logger框架支持将log日志保存在文件中,只需换一个适配器即可。
Logger.addLogAdapter(new DiskLogAdapter());
该适配器同样也可以重新配置默认的参数,但会有点不同,配置的是日期格式等。
其他
对Log信息的设置与过滤:
- Filter:编辑默认或者自定义的标签,过滤标签以外的信息;
- Disable:设置user soft wraps,即设置换行
- Setting:设置log头部的信息,比如时间、线程PID、包名、TAG等开关设置