文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
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;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论