返回介绍

Log 类的设计

发布于 2025-02-25 12:45:28 字数 2004 浏览 0 评论 0 收藏 0

正式代码设计之前我们先考虑一下日志类的使用。

日志主要用在调试 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文