Log做什么用?
Android研发人员在调试程序的时候,或多或少的会使用log来查看程序运行状态。
同时,系统也会通过log提示研发人员,系统需要处理的信息,例如异常,系统警告。
程序运行状态(多线程尤为重要)
Log的级别
- Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思;
- Log.d的输出颜色是蓝色的,仅输出debug调试的意思;
- Log.i的输出为绿色,一般提示性的消息information;
- Log.w的输出为橙色,可以看作为warning警告,一般需要我 们注意优化Android代码;
- Log.e为红色,可以想到error错误。
显示级别 v>d>i>w>e
选择v所有都会出现,选择d会出现本身及以下,选择e只会出现e的信息
简单、漂亮、功能强大的Logger
- 线程信息Thread information
- 类信息Class information
- 方法信息Method information
- 漂亮打印的JSON内容Pretty-print for json content
- 清空输出Clean output
- 跳转到源代码Jump to source feature
2.打印不同level的Log
VERBOSE:
Logger.v(String message); // VERBOSE级别,可添加占位符
DEBUG:
Logger.d(Object object); // DEBUG级别,打印对象
Logger.d(String message); // DEBUG级别,可添加占位符
INFO:
Logger.i(String message); // INFO级别,可添加占位符
WARN:
Logger.w(String message); // WARN级别,可添加占位符
ERROR:
Logger.e(String message); // ERROR级别,可添加占位符
Logger.e(Throwable throwable, String message); // ERROR级别,可添加占位符
其他:
Logger.wtf(String message); // ASSERT级别,可添加占位符
Logger.xml(String xml);
Logger.json(String json);
为啥使用它?
- 默认实现是对于android.util.Log的封装
- 弥补了“android的logcat的message有字符长度的限制,超过将直接截断”的缺陷
- 支持参数添加占位符来格式化字符串,Logger.d(“hello %s”, “world”);
- 支持直接打印List,Set,Map,数组类型等引用类型
- 指定任意TAG
- 配置初始化选项
- 支持自定义CustomLogAdapter实现LogAdapter,替换android.util.Log
如何使用?——》官方文档
添加依赖:
implementation 'com.orhanobut:logger:2.2.0'
配置初始化选项(非必须选项,不配置的情况下会使用系统默认的初始化配置 ,根据需求增删,最后adapter是必要的)
Logger
.init("mytag") //LOG TAG默认是PRETTYLOGGER
.methodCount(3) // 决定打印多少行(每一行代表一个方法)默认:2
.hideThreadInfo() // 隐藏线程信息 默认:显示
.logLevel(LogLevel.NONE) // 是否显示Log 默认:LogLevel.FULL(全部显示)
.methodOffset(2) // 默认:0
.logAdapter(new AndroidLogAdapter()); //可以自己构造适配器默认:AndroidLogAdapter
}
效果:
以下是官方文档的内容:
选项
Logger.d("debug");
Logger.e("error");
Logger.w("warning");
Logger.v("verbose");
Logger.i("information");
Logger.wtf("What a Terrible Failure");
支持字符串格式参数
Logger.d("hello %s", "world");
支持集合(仅适用于调试日志)
Logger.d(MAP);
Logger.d(SET);
Logger.d(LIST);
Logger.d(ARRAY);
Json和Xml支持(输出将处于调试级别)
Logger.json(JSON_CONTENT);
Logger.xml(XML_CONTENT);
Advanced
FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder()
showThreadInfo(false) //(可选)是否显示线程信息。默认值true
.methodCount(0) //(可选)要显示的方法行数。默认值2
.methodOffset(7) //(可选)隐藏内部方法调用到偏移量。默认值5
.logStrategy(customLog)//(可选)更改要打印的日志策略。默认LogCat
.tag(“我的自定义标签”) //(可选)每个日志的全局标记。默认PRETTY_LOGGER .build PRETTY_LOGGER
.build();
Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));
Loggable
日志适配器通过检查此功能来检查是否应打印日志。如果要禁用/隐藏输出日志,请覆盖isLoggable
方法。 true
将打印日志消息,false
将忽略它。
Logger.addLogAdapter(new AndroidLogAdapter() {
@Override public boolean isLoggable(int priority, String tag) {
return BuildConfig.DEBUG;
}
});
将日志保存到文件中
// TODO:稍后会添加更多信息
Logger.addLogAdapter(new DiskLogAdapter());
将自定义标记添加到Csv格式策略
FormatStrategy formatStrategy = CsvFormatStrategy.newBuilder()
.tag("custom")
.build();
Logger.addLogAdapter(new DiskLogAdapter(formatStrategy));
这个怎么运作
More
- 使用过滤器可获得更好的效果。PRETTY_LOGGER或您的自定义标记
- 确保禁用换行选项
- 您还可以通过更改设置来简化输出。
- Timber Integration
// Set methodOffset to 5 in order to hide internal method calls
Timber.plant(new Timber.DebugTree() {
@Override protected void log(int priority, String tag, String message, Throwable t) {
Logger.log(priority, tag, message, t);
}
});
更多内容示例:可参考这些文章 :