Log框架之Logger

是什么?

有何特点?

  • 能够提供:
    1. 线程信息:log在哪个线程
    2. 类信息:log在哪个类
    3. 方法信息:log在哪个方法的哪一行
    4. 漂亮地打印json
    5. 漂亮的换行分割
    6. 整洁的输出
    7. 跳转到源代码

为什么用它?

  1. 默认实现是对于android.util.Log的封装
  2. 弥补了“android的logcat的message有字符长度的限制,超过将直接截断”的缺陷
  3. 支持参数添加占位符来格式化字符串,Logger.d("hello %s", "world");
  4. 支持直接打印List,Set,Map,数组类型等引用类型
  5. 指定任意TAG
  6. 配置初始化选项
  7. 支持自定义CustomLogAdapter实现LogAdapter,替换android.util.Log

怎么使用?

1. 配置初始化选项(可选操作,不配置会提供默认配置)

Logger
  .init("mytag")                 // default PRETTYLOGGER or use just init()
  .methodCount(3)                 // default 2
  .hideThreadInfo()               // default shown
  .logLevel(LogLevel.NONE)        // default LogLevel.FULL
  .methodOffset(2)                // default 0
  .logAdapter(new AndroidLogAdapter()); //default AndroidLogAdapter
}

注:以上任一配置项都是可选的,可以根据需求组合。最好是在Application的onCreate()里面配置。
默认配置下,Logger.d("hello");效果如下:
logger0.png-17.1kB

  • 最上面的区域显示线程信息:Thread:main表示是在主线程。通过设置Logger.hideThreadInfo()可以隐藏该区域;
  • 中间的区域显示类和方法信息:按方法调用栈的顺序打印,可以看出MainActivityonCreate方法调用了method2方法,后者执行了Logger.d("hello");,并且Logger.d("hello");位于MainActivity类的第73行,鼠标左键单击蓝色链接,就能跳转到Logger.d("hello");处于源代码中的位置。
    Logger.methodCount(int)决定打印多少行(每一行代表一个方法),设置Logger.methodCount(3)效果为:
    logger1.png-20.1kB
    Logger.logLevel(LogLevel)设置日志等级,LogLevel.FULL打印所有日志,LogLevel.NONE不打印日志,发布正式版本应该用LogLevel.NONE
    Logger.methodOffset(int)设置方法的偏移量,设置Logger.methodOffset(1)效果为:
    logger2.png-19.6kB
    设置Logger.methodOffset(-1)效果为:
    logger3.png-19.5kB
    Logger.logAdapter(LogAdapter)设置log最终的打印逻辑,默认是AndroidLogAdapter,源码如下:
package com.orhanobut.logger;

import android.util.Log;

class AndroidLogAdapter implements LogAdapter {
  @Override public void d(String tag, String message) {
    Log.d(tag, message);
  }

  @Override public void e(String tag, String message) {
    Log.e(tag, message);
  }

  @Override public void w(String tag, String message) {
    Log.w(tag, message);
  }

  @Override public void i(String tag, String message) {
    Log.i(tag, message);
  }

  @Override public void v(String tag, String message) {
    Log.v(tag, message);
  }

  @Override public void wtf(String tag, String message) {
    Log.wtf(tag, message);
  }
}
  • 最下面的区域显示log的最重要部分:message

2. 打印不同级别的log

Logger.v(String message); // VERBOSE级别,可添加占位符
Logger.d(Object object); // DEBUG级别,打印对象
Logger.d(String message); // DEBUG级别,可添加占位符
Logger.i(String message); // INFO级别,可添加占位符
Logger.w(String message); // WARN级别,可添加占位符
Logger.e(String message); // ERROR级别,可添加占位符
Logger.e(Throwable throwable, String message); // ERROR级别,可添加占位符
Logger.wtf(String message); // ASSERT级别,可添加占位符

// 一个综合方法,level可取Logger.VERBOSE...Logger.ASSERT
Logger.log(int level, String tag, String message, Throwable throwable);

String xml = "<note><to>George</to><from>John</from><heading>Reminder</heading><body>Don't forget the meeting!</body></note>";
Logger.xml(xml); // 打印xml

String json = "{" +
        "\"employees\": [" +
        "{ \"firstName\":\"Bill\" , \"lastName\":\"Gates\" }," +
        "{ \"firstName\":\"George\" , \"lastName\":\"Bush\" }," +
        "{ \"firstName\":\"Thomas\" , \"lastName\":\"Carter\" }" +
        "]" +
        "}";

Logger.json(json); // 打印json

3.打印List,Set,Map,数组类型

Logger.d(Object object);

4.指定TAG

Logger.init(String tag);
Logger.t(String tag);
Logger.t(String tag, int methodCount); 

5.通过占位符格式化字符串

Logger.d("hello %s %d", "world", 100); // 占位符的使用,打印“hello world 100
发布了6 篇原创文章 · 获赞 6 · 访问量 8775
展开阅读全文

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

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

分享到微信朋友圈

×

扫一扫,手机浏览