Android Log

前言

对于软件开发而言,日志是很重要的一个工具,通过日志可以帮助调试解决编程中的bug,以及程序运行的具体信息。对于Android开发来讲,日志也是必不可少的工具,学会使用log也是必备的技能之一。Log的使用也有很多技巧,本文主要记录根据需求对Android Log进行扩展。

Android Log相关资料

Android官方提供的Log接口已经能基本满足需求,比如日志的格式化输出,分类,保存等等,具体就不展开介绍(详情请查看官网go),但是在开发中我们可能想获得更多的信息,让日志输出更加清晰,或者将应用日志进行模块分类等等,所以就需要对接口进行扩展。
关于日志扩展,比较知名的框架有:LoggerHugoTimber。本文就两个开源项目进行分析,一个是KLog, 一个是Logger, 通过分析,将两个项目中有用的功能提取出来,以满足自定义需求,并对其功能进行分析。

Android Log

Android Log源码 SDK 5.1.1

Android提供的日志接口,主要将日志分成ASSERT, ERROR, WARN, INFO, DEBUG, VERBOS几种等级,级别依次降低。通过Log.wtf(), Log.e(), Log.w(), Log.i(), Log.d(), Log.v()进行使用。

注:Log.wtf()--ASSERT
非常严重的错误,一个不应该发生的情况。错误将始终以ASSERT级别调用堆栈记录。根据系统配置,报告可能会被添加到android.os.dropboxmanager和/或进程可能会立即终止并弹出一个错误对话框。

KLog

简介

  1. 支持显示行号
  2. 支持显示Log所在函数名称
  3. 支持无Tag快捷打印
  4. 支持在Android Studio开发IDE中,点击函数名称,跳转至Log所在位置
  5. 支持JSON字符串解析打印
  6. 支持XML字符串解析打印
  7. 支持Log信息存储到文件
  8. 依赖库非常小,只有不到10K
  9. 支持无限长字符串打印,无Logcat4000字符限制
  10. 支持变长参数,任意个数打印参数
  11. 支持设置全局Tag

demo展示:

这里写图片描述

相关实现原理

KLog日志工具主要包括6个类:BaseLog, FileLog, JsonLog, XmlLog, Util, KLog。每个类的主要功能如下图所示:
这里写图片描述
具体的实现,可直接去Github查看,作者在工具的介绍中也提到部分的灵感来自Logger,该工具还是比较简单,实现也比较清晰,接下来看看Logger是如何实现的。

Logger

简介

作者:Orhan Obut, 谷歌安卓开发专家
一个简单,清晰的,强大的Android开发日志工具。主要的特点如下:
1. 输出当前打印日志所在线程信息
2. 输出当前打印日志的类信息
3. 输出当前打印日志的方法信息
4. 将JSON日志格式化输出
5. 快速定位日志输出的位置
6. 清晰的换行,日志输出

相关实现原理

相对于KLog, Logger实现的模式会比较不容易理解,但是具体的功能还是类似的。Logger的类图如下所示:

Logger_StartUML

LogAdapter : 定义Logger模块的几种日志类别接口,其实和Android日志类似。
AndroidLogAdapter : 实现LogAdapter中的接口,具体实现调用Android Log的对应级别日志输出。
Helper : 提供简单的通用方法。
LogLevel : 图中未列出,是一个包含两种日志打印级别的枚举。
Logger : 整个日志对外提供的日志输出接口,具体的日志输出则由LoggerPrinter实现。
Printer : 定义Logger日志打印所提供业务接口抽象。
LoggerPrinter : 是Pinter中定义的业务接口的具体实现,保存不同级别日志的输出。
Setting : 保存日志设置信息,包括打印方法的层次,是否需要打印线程信息等日志设置,其中包含一个LogAdaper属性用于具体的日志输出。

这个开源项目:不是将日志设计成一个单独的工具,个人感觉像是一个日志模块,提供的类都是不可继承的,其编程思想还是很清晰的,类功能单一,日志功能分成抽象。很值得在平常编程,设计时学习其编程思想,项目虽小,但是编程思路很值得学习。

自定义Log模块

参考:

  1. KLog
  2. Logger
  3. Hugo
  4. Timber
  5. Android日志查看与使用
发布了47 篇原创文章 · 获赞 35 · 访问量 11万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览