解密android日志xlog,XLog 详解及源码分析

本文详细介绍了Android日志库XLog的特点,如全局配置、对象格式化、无限长日志等,并对其源码进行了深入分析,包括LogConfiguration、Formatter、Printer等组件的工作原理,帮助读者理解XLog如何实现强大的日志功能。
摘要由CSDN通过智能技术生成

一、前言

这里的 XLog 不是微信 Mars 里面的 xLog,而是elvishew的xLog。感兴趣的同学可以看看作者 elvishwe 的官文史上最强的 Android 日志库 XLog。这里先过一下它的特点以及与其余日志库的比较。文章主要分析 xLog 中的所有特性的实现,以及作为一个日志工具,它实际的需求是什么。

特点1.全局配置(TAG,各种格式化器...)或者基于单条日志的配置

2.支持打印任意对象以及可自己设置的对象格式化器

3.支持打印数组

4.支持打印无限长的日志(没有 4K 字符的限制)

5.XML 和 JSON 格式化输出

6.线程信息(线程名等,可自己设置)

7.调用栈信息(可配置的调用栈深度,调用栈信息包括类名、方法名文件名和行号)

8.支持日志阻拦器

9.保存日志文件(文件名和自动备份策略可灵活配置)

10.在 Android Studio 中的日志样式美观

11.简单易用,扩展性高

与其余日志库的区别1.柔美的源代码,良好的文档

2.扩展性高,可轻松扩展和强化功能

3.轻量级,零依赖

二、源码分析

1.官文架构

c1c1517efc74abf1dd2a371d54758daf.pngimage.png

2.全局配置及其子组件详情// 日志输出样式配置LogConfiguration config = new LogConfiguration.Builder() .tag("MY_TAG") // 指定 TAG,默认为 "X-LOG" .t() // 允许打印线程信息,默认禁止 .st(2) // 允许打印深度为2的调用栈信息,默认禁止 .b() // 允许打印日志边框,默认禁止 .jsonFormatter(new MyJsonFormatter()) // 指定 JSON 格式化器,默认为 DefaultJsonFormatter .xmlFormatter(new MyXmlFormatter()) // 指定 XML 格式化器,默认为 DefaultXmlFormatter .throwableFormatter(new MyThrowableFormatter()) // 指定可抛出异常格式化器,默认为 DefaultThrowableFormatter .threadFormatter(new MyThreadFormatter()) // 指定线程信息格式化器,默认为 DefaultThreadFormatter .stackTraceFormatter(new MyStackTraceFormatter()) // 指定调用栈信息格式化器,默认为 DefaultStackTraceFormatter .borderFormatter(new MyBoardFormatter()) // 指定边框格式化器,默认为 DefaultBorderFormatter .addObjectFormatter(AnyClass.class, // 为指定类增加格式化器 new AnyClassObjectFormatter()) // 默认使用 Object.toString() .build();// 打印器Printer androidPrinter = new AndroidPrinter(); // 通过 android.util.Log 打印日志的打印器Printer SystemPrinter = new SystemPrinter(); // 通过 System.out.println 打印日志的打印器Printer filePrinter = new FilePrinter // 打印日志到文件的打印器 .Builder("/sdcard/xlog/") // 指定保存日志文件的路径 .fileNameGenerator(new DateFileNameGenerator()) // 指定日志文件名生成器,默认为 ChangelessFileNameGenerator("log") .backupStrategy(new MyBackupStrategy()) // 指定日志文件备份策略,默认为 FileSizeBackupStrategy(1024 * 1024) .logFlattener(new MyLogFlattener()) // 指定日志平铺器,默认为 DefaultLogFlattener .build();

全局配置主要是为了根据业务需求进行相关的配置。xLog 的配置可以分成 2 个大类别:日志的输出样式以及日志输出的打印器配置。

LogConfiguration

LogConfiguration 的构造用是 Builder 设计模式。对于属性配置类,一般因为会有比较多的配置项,并且一般都会设定其默认配置值,所以大多都会选择采用 Builder 设计模式。

6726ea2fea03ab5351190e974e044e0a.pngLogConfiguration.jpg

上图是一个在 Bu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值