-
Notifications
You must be signed in to change notification settings - Fork 31
Migrating
PLog 2.0版本在1.7.x的基础上做了大规模的重构,其公开API也做了一些调整,包括较多不兼容的升级。这篇wiki将详细列出从1.x版本升级到2.x版本所需要注意的地方,希望能对大家有所帮助。
- 虽然有诸多不便,但还是推荐大家使用新版PLog以获得更强大、更稳定的性能。
- 由于个人精力有限,在2.0正式版发布之后,1.x版本将逐步停止维护,但同时也一如既往地欢迎大家一起维护这个日志库。
1.x版本的依赖包为单个依赖,2.x做了拆包处理,可按需配置,有助于进一步压缩体积。
compile 'org.mym.plog:android-plog:1.7.0' //1.x
compile "org.mym.plog:plog-core:${VERSION_NAME}" //2.x
详细的依赖包请参见这里。
这个选项在实践中发现用途不是很大,因此在2.x版本中已将其从公开API中删除。现在自动Tag会默认带上内部类的完整信息。
2.x版本使用Interceptor
接口做输出拦截;提供全局拦截和单一通道拦截。
如果需要全局拦截(类似于1.x版本中的行为),则可以在初始化时设置一个全局拦截器:
//PLogConfig.Builder builder;
builder.globalInterceptor(new Interceptor() {
@CheckResult
boolean onIntercept(@PrintLevel int level, @NonNull String tag,
@Nullable Category category, @NonNull String msg) {
//This will intercept all logs on release version!
return BuildConfig.DEBUG;
}
});
如果需要拦截特定通道,可以给相应的Printer
设置Interceptor
,或者直接复写其onIntercept
方法。
PLog1.x版本的Logger
接口与原生接口高度匹配,但实际应用中发现很不方便继承,因此2.x版本已经删除该接口,并整合到了Printer
接口中。请将Logger方法的实现迁移到Printer
接口的print
方法。
在2.x版本中,由于Printer
之间相互独立,1.x版本中的maxLengthPerLine
配置失去了原本的意义,因此已经删除。
在新版本中,内置的DebugPrinter
有两个构造器:
public DebugPrinter(boolean isDebug);
public DebugPrinter(boolean isDebug, int maxLengthPerLine);
在使用第一个构造器时,DebugPrinter
会自动使用100字符换行;如果使用第二个参数则使用给定的参数换行。
另外,如果需要实现自定义Printer
,可以直接继承AbsPrinter
获得该特性,也可以自行实现SoftWrapper
接口。
在PLog 1.x版本中,所有日志参数通过v/d/i/w/e/logWithStackOffset
等方法一次性传入,参数较为冗长,且扩展极为不便。2.0版本将日志调用封装为LogRequest
类调用,对于涉及复杂参数的调用时,只需要设置必要的参数即可。
- 该改动对于基本的只需要一个msg参数的调用,没有任何影响;
- 配合此次改动,原有的带有
tag
/level
/stackoffset
参数的相关方法均已删除或修改签名。因此升级版本库后,需要特别注意v/d/i/w/e
方法的相关调用参数,否则打印出的日志可能和之前版本的不同。 - 使用LogRequest发起请求时,请务必注意最后调用
execute()
方法,否则并不会打印日志。
PLog.empty(); //Both 1.x and 2.x
PLog.v("x=3"); //Both 1.x and 2.x
//In 1.x version:
PLog.logWithStackOffset(Log.INFO, 1, getClass().getSimpleName(), "This is a log testing stack offset.");
//In 2.x version
PLog.level(Log.INFO).stackOffset(1).msg("This is a log testing stack offset.").execute();