前言
说起日志,平时调试用的Log类你肯定非常熟悉,并且用着也很方便,可是当你的项目逐渐走上正轨,并且越来越完善的时候,你可能会发现之前大量的Log输出严重影响了你项目的调试,并且分散到每个没文件里的Log输出非常难以管理。
(如果你已经开始考虑日志框架的问题了,那么说明你对日志有了一定的了解,这里就不在对日志级别之类的基础知识进行描述了,)
这个时候你可能会想:我需要一个日志管理工具!
如果你从事过javaEE开发或在网上查过“日志框架”这类关键词,那么
log4j+commons-logging
slf4j + logback
这样的优秀日志框架你一定不会陌生,他们已经成为了日志框架的主流。
但是,对于Android平台,这样的日志框架是不是太重了呢?通常来说,在移动开发中,我们并不建议大量引入第三方类库,每个类库的引用都是要经过细致的权衡的。
其实,我们完全根据自己的需求,可以开发自己的日志框架。这真的很简单!
开发之初
首先在开发之初,你需要知道几件事:
- 我的需求什么?
- 主流的日志框架功能有哪些?
- 别人是怎么做的?
通常来说使用日志框架的需求有这些:
1. 控制日志输出级别,开发中输出所有日志,打release包时,只输出错误或警告日志。
2. 日志的本地保存和服务器上传
3. 可控的保存或上传开关和级别
4. 不同日志不同保存方式
5. 更优的日志使用接口
6. 更优的使用性能
7. …….
主流的日志框架功能:
slf4j 或log4j的模式是 包装类(门面)+ 日志框架。上述的需求,他们基本都已经实现,并且性能还很不错。但你需要注意的是,通常使用这些框架的都是大型服务器系统类型,他们对日志的需求很高,同时也不在乎多一个外部库。对于移动开发,你可能用不到那么多的功能,比如 “门面”的作用是可以兼容不同的日志框架,移动端有必要吗?小应用android自带的java.util.logging都够了。
别人是怎么做的:
这个时候你可能特别想知道别人是怎么做的?如果没有更好的了解渠道,反编译也许帮到你。楼主反编译了3个APK,Path、QQ空间、Google+。虽然读反编译的代码很痛苦,但你真的可以看到一些大平台是如何做的。
(关于反编译的方法,其实很简单,可以参考这篇博客:http://blog.youkuaiyun.com/vipzjyno1/article/details/21039349/)
那么好吧,说了这么多,开始正题吧。下面是楼主写的日志管理框架,一个很简单的小Demo。
先看代码目录
很简单,关键代码只有3个。
LogConfig: Log的配置信息。
LogPrint : Log的具体输出实现。
WLog: Log的 “门面” ,具体使用通过调用WLog。
先说一下日志的控制逻辑:
/**
* Log输出机制:
* LogLevel:Log输出级别控制
* if( 要输出的日志级别 >= LogLevel )
* 输出;
* else
* 不输出;
*
* Log上传和保存机制:
* UploadSwitch: 上传保存的总开关
* if(UploadSwitch == false)
* 什么都不做
* else
* if (调用Log上传方法)
* 上传并保存
* else
* if(flag>=LogConfig.UploadLevel)
* 上传
* if(flag>=LogConfig.SaveFileLevel)
* 保存
*
*/
可能看的不太明白,看完代码你就懂了,很简单。
我们先看LogConfig.java
public class Log