阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

爆料喽!!!开源日志库Logger的使用秘籍

94次阅读
没有评论

共计 3659 个字符,预计需要花费 10 分钟才能阅读完成。

导读 日志对于开发来说是非常重要的,不管是调试数据查看、bug 问题追踪定位、数据信息收集统计,日常工作运行维护等等,都大量的使用到。今天介绍著名开源日志库 Logger 的使用,库的地址:https://github.com/orhanobut/logger

爆料喽!!!开源日志库 Logger 的使用秘籍

在 Android Studio 中的 gradle 中加入,就可以引用依赖 logger 库:
dependencies {compile 'com.orhanobut:logger:1.15'}
Logger 库能提供的功能:
  1. 线程的信息
  2. 类的信息
  3. 方法的信息
  4. 格式打印 json、xml 等
  5. 点击链接跳转到源码打印处
Logger 的使用

使用非常简单:

String userName = "Jerry";
Logger.i(userName);

打印的效果:
爆料喽!!!开源日志库 Logger 的使用秘籍

日志效果

这个效果格式是不是很清晰,可以看到,当前打印处的线程名、方法名、方法位置、打印的信息。同时点击方法的位置还可以跳转到打印的位置,这样调试起来就非常的方便了。
可以看到上图打印的 TAG 是 PRETTYLOGGER,这个是 Logger 默认的 tag,如果要修改可以:

// 修改打印的 tag 值
Logger.init("MainActivity");String userName = "Jerry";
Logger.i(userName);

爆料喽!!!开源日志库 Logger 的使用秘籍

修改 tag 的日志效果

有的小伙伴觉得,我不想一直都只用一个 tag,那岂不是要写很多的 Logger.init(tag)来修改,我们看方法名叫 init,作者的意思估计是只用一次就好了。下面可以通过:

Logger.init("MainActivity");String userName = "Jerry";
Logger.i(userName);// 给当前打印的换一个单独的 tag 名
Logger.t("App").i(userName);
Logger.e(userName);

爆料喽!!!开源日志库 Logger 的使用秘籍

 单独修改的 tag 打印效果

从图上可以看出,使用 Logger.t(tag)这个方法就修改了 tag,而且还不会影响后面其它的打印的 tag,是不是灵活又方便呢。

我们继续看,我们都知道 android 自带的 Log 日志,是无法直接打印除了字符串以为的值或变量对象的。
爆料喽!!!开源日志库 Logger 的使用秘籍

 系统自带的打印 int,报错

有的时候确实挺麻烦,还得可以拼接成字符串来打印 (宝宝(づ。◕‿‿◕。) づ心理的苦身为 Android 攻城狮都体会过),强大的 Logger 可以办到:

Logger.i("大家好,我叫 %s,今年 %d,很高兴大家来看我的文章!!!", "Jerry", 18);

爆料喽!!!开源日志库 Logger 的使用秘籍

 拼接 int 数值打印效果

学过 C 语言的应该都知道:printf(“age: %d”, 16)这样的打印函数,是不是有似曾相识的感觉。再来改改:

Logger.t("你特么才 16 岁么").i("大家好,我叫 %s,今年 %d 岁,很高兴大家来看我的文章!!!", "Jerry", 16);

爆料喽!!!开源日志库 Logger 的使用秘籍

 可怜的日志君,有种被玩坏的感觉

除了这些,Logger 还可以打印很多形式的数据,极大的方便了我们的开发:

Logger.d("hello");
Logger.e("hello");
Logger.w("hello");
Logger.v("hello");
Logger.wtf("hello");
// 打印 json 格式
String json = createJson().toString();
Logger.json(json);
// 打印 xml 格式
Logger.xml(XML_CONTENT);
// 打印自定义级别、tag、信息等格式日志
Logger.log(DEBUG, "tag", "message", throwable);
// 创建 json 数据
private JSONObject createJson() {
try {JSONObject person = new JSONObject();
      person.put("phone", "12315");
      JSONObject address = new JSONObject();
      address.put("country", "china");
      address.put("province", "fujian");
      ddress.put("city", "xiamen");
      person.put("address", address);
      person.put("married", true);
      return person;
    } 
catch (JSONException e) {Logger.e(e, "create json error occured");
             }
 return null;
                        }
                                }

爆料喽!!!开源日志库 Logger 的使用秘籍

 漂亮的 json 格式打印效果

关于打印 json,还有个小插曲,博主第一次使用的时候,半天没有出效果,没打印出来,于是我改成了 DDMS 的 Logcat,还是一样。后来去跟踪源码,看 Logger.json()是怎么打印的,源码最终是使用系统的 Log.d(tag, msg)来打印的。于是博主用打断点 debug,发现上图格式的所有字符串都有传入到 Log.d 的 msg 中,就是不打印(心累),于是我直接:

Log.d("MainActivity", "onActivityCreated: log.d 跑哪里去了...");

日志还是不显示,这就说明有可能是我的魅族 MX4 手机的问题,Google 了一下,果然有说魅族手机 Log.d()日志不打印的问题,是因为魅族默认不开启 Debug 模式的日志打印,需要在开发者选项 — 高级日志输出 — 选择全部允许(参考解决文章:http://blog.csdn.net/u013175701/article/details/51428870),至此日志打印出来了。

Logger 库还针对显示可以自己自定义:

  • Settings setting = Logger.init(“MainActivity”);
    setting.logLevel(LogLevel.FULL) 
    //  显示全部日志,LogLevel.NONE 不显示日志,默认是 Full
     .methodCount(5)         
    //  方法栈打印的个数,默认是 5
    .methodOffset(0)       
     //  设置调用堆栈的函数偏移值,0 的话则从打印该 Log 的函数开始输出堆栈信息,默认是 0
    .hideThreadInfo();      
    //  隐藏线程信息

.logAdapter(new AndroidLogAdapter()); // 自定义一个打印适配器,这里适配了 Android 的 Log 打印,你也可以自己实现 LogAdapter 接口来做一些特殊需求的日志打印适配

爆料喽!!!开源日志库 Logger 的使用秘籍

 自定义日志显示

线程显示隐藏了,方法栈显示的偏移量为 0,表示从打印的 Log 的地方开始算方法数的 5 个堆栈内的方法都打印出来。

打印数组、List、map 等对象数据
String[] names = {"Jerry", "Emily", "小五", "hongyang", "七猫"};
        Logger.d(names);  // 打印字符数组
        List<User> users = new ArrayList<>();
        for (int i = 0; i < names.length; i++) {User user = new User(names[i], 10 + i); 
                users.add(user);
                }
        Logger.d(users);  // 打印 List
        class User {
                private String name;
                private int age;
                public User(String name, int age) {
                             this.name = name;
                             this.age = age;
                             }
        public String getName() {return name;}
        public void setName(String name) {this.name = name;}
        public int getAge() {return age;} 
        public void setAge(int age) {this.age = age;} 
       // 要覆写对象的 toString 方法才可以打印出完整的日志信息
       @Override
       public String toString() {
       return "User{" +
              "name='" + name + '/'' +
              ", age=" + age +
              '}';
                                }
              }

爆料喽!!!开源日志库 Logger 的使用秘籍

 打印字符数组和 List(User 没有覆写 toString)

爆料喽!!!开源日志库 Logger 的使用秘籍

 打印字符数组和 List(User 已经覆写 toString)

至此,Logger 库的使用介绍算告一段落,还有什么好玩的,细节的使用方式,小伙伴有更好的建议的欢迎留言! 感谢您的观看!!!

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计3659字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中