是什么?
- 是一个简单,漂亮,强大的Android开源日志工具,代码托管在github上 https://github.com/orhanobut/logger
有何特点?
- 能够提供:
- 线程信息:log在哪个线程
- 类信息:log在哪个类
- 方法信息:log在哪个方法的哪一行
- 漂亮地打印json
- 漂亮的换行分割
- 整洁的输出
- 跳转到源代码
为什么用它?
- 默认实现是对于android.util.Log的封装
- 弥补了“android的logcat的message有字符长度的限制,超过将直接截断”的缺陷
- 支持参数添加占位符来格式化字符串,
Logger.d("hello %s", "world");
- 支持直接打印List,Set,Map,数组类型等引用类型
- 指定任意TAG
- 配置初始化选项
- 支持自定义CustomLogAdapter实现LogAdapter,替换android.util.Log
怎么使用?
1. 配置初始化选项(可选操作,不配置会提供默认配置)
Logger
.init("mytag") // default PRETTYLOGGER or use just init()
.methodCount(3) // default 2
.hideThreadInfo() // default shown
.logLevel(LogLevel.NONE) // default LogLevel.FULL
.methodOffset(2) // default 0
.logAdapter(new AndroidLogAdapter()); //default AndroidLogAdapter
}
注:以上任一配置项都是可选的,可以根据需求组合。最好是在Application的onCreate()里面配置。
默认配置下,Logger.d("hello");
效果如下:
- 最上面的区域显示线程信息:Thread:main表示是在主线程。通过设置
Logger.hideThreadInfo()
可以隐藏该区域; - 中间的区域显示类和方法信息:按方法调用栈的顺序打印,可以看出
MainActivity
的onCreate
方法调用了method2
方法,后者执行了Logger.d("hello");
,并且Logger.d("hello");
位于MainActivity
类的第73行,鼠标左键单击蓝色链接,就能跳转到Logger.d("hello");
处于源代码中的位置。
Logger.methodCount(int)
决定打印多少行(每一行代表一个方法),设置Logger.methodCount(3)
效果为:
Logger.logLevel(LogLevel)
设置日志等级,LogLevel.FULL
打印所有日志,LogLevel.NONE
不打印日志,发布正式版本应该用LogLevel.NONE
。
Logger.methodOffset(int)
设置方法的偏移量,设置Logger.methodOffset(1)
效果为:
设置Logger.methodOffset(-1)
效果为:
Logger.logAdapter(LogAdapter)
设置log最终的打印逻辑,默认是AndroidLogAdapter
,源码如下:
package com.orhanobut.logger;
import android.util.Log;
class AndroidLogAdapter implements LogAdapter {
@Override public void d(String tag, String message) {
Log.d(tag, message);
}
@Override public void e(String tag, String message) {
Log.e(tag, message);
}
@Override public void w(String tag, String message) {
Log.w(tag, message);
}
@Override public void i(String tag, String message) {
Log.i(tag, message);
}
@Override public void v(String tag, String message) {
Log.v(tag, message);
}
@Override public void wtf(String tag, String message) {
Log.wtf(tag, message);
}
}
- 最下面的区域显示log的最重要部分:message
2. 打印不同级别的log
Logger.v(String message); // VERBOSE级别,可添加占位符
Logger.d(Object object); // DEBUG级别,打印对象
Logger.d(String message); // DEBUG级别,可添加占位符
Logger.i(String message); // INFO级别,可添加占位符
Logger.w(String message); // WARN级别,可添加占位符
Logger.e(String message); // ERROR级别,可添加占位符
Logger.e(Throwable throwable, String message); // ERROR级别,可添加占位符
Logger.wtf(String message); // ASSERT级别,可添加占位符
// 一个综合方法,level可取Logger.VERBOSE...Logger.ASSERT
Logger.log(int level, String tag, String message, Throwable throwable);
String xml = "<note><to>George</to><from>John</from><heading>Reminder</heading><body>Don't forget the meeting!</body></note>";
Logger.xml(xml); // 打印xml
String json = "{" +
"\"employees\": [" +
"{ \"firstName\":\"Bill\" , \"lastName\":\"Gates\" }," +
"{ \"firstName\":\"George\" , \"lastName\":\"Bush\" }," +
"{ \"firstName\":\"Thomas\" , \"lastName\":\"Carter\" }" +
"]" +
"}";
Logger.json(json); // 打印json
3.打印List,Set,Map,数组类型
Logger.d(Object object);
4.指定TAG
Logger.init(String tag);
Logger.t(String tag);
Logger.t(String tag, int methodCount);
5.通过占位符格式化字符串
Logger.d("hello %s %d", "world", 100); // 占位符的使用,打印“hello world 100”