PLog 定义了大量的配置项,以允许你尽可能在不修改代码的情况下扩展需求。

装饰性配置选项

有一些配置项是修改日志内容,使其更方便筛选和定位的,包括:

  • 自动标签
  • 全局标签
  • 强制拼接全局标签
  • 行号信息
  • 线程信息

autoTag (自动标签)

PLog 可以智能推断日志的标签,为你每行日志自动设置代码所在的类名为标签。 该选项默认为开启,如果你确信不需要这个特性,你可以手动关闭它。

某些情况下自动标签得到的值可能不是你想要的,这时候你需要检查你的栈帧偏移是否设置正确。

GlobalTag (全局标签)

全局标签可以让你很容易区分你的应用日志与其他应用日志,你可以直接在 LogCat 中设置一个过滤器。

理论上你可以设置任何非空的字符串作为全局标签;从设计初衷出发,我们建议你使用你的应用名称作为全局标签,以具有较高的辨识度和可读性。

forceConcatGlobalTag (强制拼接)

假如你设置了全局标签,但是又想保留自动标签功能,或者你的日志显式指定了某个标签,怎么办呢?将这个标记设置为 true 即可将两个标签拼接输出,这样可以兼顾全局标签和自动标签的筛选功能。 该选项默认关闭,但我们强烈推荐在设置全局标签时一并开启。

needLineNumber (行号信息)

使用该选项可以输出日志所在行,方便定位。输出格式使用的是标准格式,确保大部分情况下在 Android Studio 中都能直接点击链接跳转。

该选项默认关闭,需要手动开启。

needThreadInfo (线程信息)

使用该选项可以直接输出当前线程的信息,目前是采用的标准 toString() 输出,可以看到线程名、线程组、优先级信息。

该选项默认关闭,需要手动开启。

示例

下面是一个完整的日志输出:

D/Playground-MainActivity: [(MainActivity.java:58):onCreate] [Thread[main,5,main]] Here executed.

其中,Playground 是全局标签,MainActivity是自动标签, [(MainActivity.java:58):onCreate]表日志行所在行号信息, [Thread[main,5,main]]是线程信息。

控制性配置选项

另外还有一些配置项与日志内容无关,它们主要做控制方面的工作,包括:

  • globalInterceptor
  • Printer
  • Formatter

globalInterceptor

你可以设置最多一个全局拦截器。在每次日志请求到来时,该拦截器可以决定原始日志能否被打印,假如它的 onIntercept 方法返回 true, 所有的 printer 都不会收到这次日志的调用:

    @Override
	public boolean onIntercept(int level, String tag, Category category, String msg){
	    return true;
	}

Printer

参见 Printer 页面。

Formatter

你可以自定义要使用的格式化工具。

你也可以直接使用 PLog 实现的标准格式化工具(需要添加 formatter 依赖,参见 下载和设置):

config.setFormatter(new DefaultFormatter());

maxRecursiveDepth

该选项仅在使用 Formatter扩展 时生效,关于该选项的更多介绍请参见 递归深度

该选项默认值为 2.

常见问题

零配置启动

在成功 下载依赖 后,你可以直接调用 PLog 的任意API,但在第一行日志之前你可能会看到类似这样的一行警告(为突出起见,实际上用的是ERROR级别):

E/Playground-LogEngine: [(LogEngine.java:60):handleLogRequest] [Thread[main,5,main]] No printer prepared, did you forgot it?

这个警告是为了提醒开发者不要忘记定义自己的 Printer。 当你看到这行日志以后,PLog 会自动创建一个默认的 DebugPrinter,你的所有日志都将不加过滤地直接打印到控制台(LogCat)中。如果这就是你想要的(即,不加过滤或开关,也不需要额外输出到某些媒介),那么你可以忽略这个警告。

重复配置与顺序

如果必要,你可以反复地调用 PLog.init(), 但是只有最后一个配置会生效。

init() 方法与 prepared() 方法并没有固定的先后顺序。但我们推荐先初始化配置项再准备打印机。