Skip to content

Migrating

Muyangmin edited this page Feb 27, 2017 · 2 revisions

PLog 2.0版本在1.7.x的基础上做了大规模的重构,其公开API也做了一些调整,包括较多不兼容的升级。这篇wiki将详细列出从1.x版本升级到2.x版本所需要注意的地方,希望能对大家有所帮助。

  • 虽然有诸多不便,但还是推荐大家使用新版PLog以获得更强大、更稳定的性能。
  • 由于个人精力有限,在2.0正式版发布之后,1.x版本将逐步停止维护,但同时也一如既往地欢迎大家一起维护这个日志库。

Gradle依赖的改变

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

详细的依赖包请参见这里

删除keepInnerClass配置

这个选项在实践中发现用途不是很大,因此在2.x版本中已将其从公开API中删除。现在自动Tag会默认带上内部类的完整信息

删除Controller接口

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方法。

删除Logger接口

PLog1.x版本的Logger接口与原生接口高度匹配,但实际应用中发现很不方便继承,因此2.x版本已经删除该接口,并整合到了Printer接口中。请将Logger方法的实现迁移到Printer接口的print方法。

删除maxLengthPerLine配置

在2.x版本中,由于Printer之间相互独立,1.x版本中的maxLengthPerLine配置失去了原本的意义,因此已经删除。

在新版本中,内置的DebugPrinter有两个构造器:

    public DebugPrinter(boolean isDebug);
    public DebugPrinter(boolean isDebug, int maxLengthPerLine);

在使用第一个构造器时,DebugPrinter会自动使用100字符换行;如果使用第二个参数则使用给定的参数换行。

另外,如果需要实现自定义Printer,可以直接继承AbsPrinter获得该特性,也可以自行实现SoftWrapper接口。

复杂日志调用改为Builder格式

在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();