# Log类的设计
正式代码设计之前我们先考虑一下日志类的使用。
日志主要用在调试app 一些复杂的业务流程,借助log 可以很容易找到问题所在
因为android.util.Log 定义为final类(不可继承) 所以我采用组合的方式才重写一个可以控制开关的日志工具类。考虑到Log应用的广泛性,所以定义为static,生命周期为全局
~~~
public class Log {
/**
* 日志的开关, false 表示不打印日志
*/
private static boolean open = false;
public static boolean isOpen() {
return open;
}
public static void setOpen(boolean open) {
Log.open = open;
}
~~~
Log的开关控制,一般在app初始化的地方设置。后续再讨论
~~~
public static void d(String tag, String msg){
if(open == false){
return; // 不打印日志
}
android.util.Log.d(tag,msg);
}
~~~
其中tag和msg 考虑到传入的参数需要频繁转型
比如说像打印一个int型的变量值。这时候会很不方便。同理其他非String类型的都需要转化为String 。
因为优化一下当前方法
~~~
public static voidd(Object tag, Object msg){
if(open == false){
return; // 不打印日志
}
android.util.Log.d(String.valueOf(tag), String.valueOf(msg));
}
~~~
这时候如果传入的 tag == null 或者“” 或者 包含有” ” \n\r等字符 ,那么输出的结果可能不是我们想要的,
接着继续优化一下该方法
~~~
package phoebe.frame.util;
/**
* 日志打印
*
* @author coffee <br>
*
* 2015-12-16 下午9:39:41
*/
public class Log {
/**
* 日志的开关, false 表示不打印日志
*/
private static boolean open = false;
public static boolean isOpen() {
return open;
}
public static void setOpen(boolean open) {
Log.open = open;
}
public static void d(Object tag, Object msg) {
if (open == false) {
return;
}
tag = handleMsgOrTag(tag);
msg = handleMsgOrTag(msg);
android.util.Log.d(String.valueOf(tag), String.valueOf(msg));
}
private static Object handleMsgOrTag(Object msgOrTag) {
if (msgOrTag == null) {
msgOrTag = "[null]";
} else if (msgOrTag.toString().trim().length() == 0) {
msgOrTag = "[\"\"]";
} else {
msgOrTag = msgOrTag.toString().trim();
}
return msgOrTag;
}
}
~~~
- 前言
- Android sdk开发 - 序
- Android sdk开发(一)Application设计
- Android sdk开发(二) Log日志类的设计
- Android SDK开发 (三) App的属性配置
- android SDK开发-- 功能设计
- android SDK开发 -- TitleBar封装(一)
- android SDK开发 -- TitleBar封装(二)
- Android SDK开发 -- TitleBar重构 (代理模式的使用)
- Android SDK开发 -- TitleBar重构 (代理模式-优化)
- android SDK核心功能 -- 消息传递与界面刷新
- Android SDK开发 -- TitleBar重构 - 使用策略模式、舍弃代理模式