Skip to content
Tony Shen edited this page Oct 27, 2021 · 16 revisions

Tag

如果不考虑显示日志的tag,可以直接使用,L 会提供默认的tag。

String s = "abcd";
L.i(s);

如果需要使用 tag,可以在 Activity 的 onCreate() 中添加如下的代码,类名则对应是tag的名称

L.init(this.getClass());

当然,init() 除了支持传递 Class 对象,还支持传 String 对象。

LogLevel

支持以下几种日志级别,除此之外还能将任何对象打印成json格式

方法名 作用
e() Error级别打印日志
w() Warn级别打印日志
i() Info级别打印日志
d() Debug级别打印日志
json() 将日志以json格式打印出来

还可以设置全局的日志级别,最好在Application中进行全局的配置。

java中的使用方法:

L.setLogLevel(LogLevel.INFO);

kotlin中的使用方法:

L.logLevel= LogLevel.INFO

Basic

以e、w、i、d打印的日志风格如下:
第一行显示线程名
第二行显示类中打印的行数
第三行显示打印的具体内容

╔════════════════════════════════════════════════════════════════════════════════════════
║ Thread: main
╟────────────────────────────────────────────────────────────────────────────────────────
║ cn.salesuite.saf.aspects.TraceAspect.traceMethod  (TraceAspect.java:35)
╟────────────────────────────────────────────────────────────────────────────────────────
║ loadUser() take [14ms]
╚════════════════════════════════════════════════════════════════════════════════════════

json方法的使用

Object obj = ...
L.json(obj);

Object

多种对象类型都可以使用json()方法打印成json风格。

List、Set

        User u = new User();
        u.userName = "tony";
        u.password = "123456";

        List<User> list = new ArrayList<>();
        list.add(u);
        list.add(u);
        L.json(list);

        List<String> ids = new ArrayList<>();
        ids.add("123");
        ids.add("456");
        L.json(ids);

        List<Double> idd = new ArrayList<>();
        idd.add(123D);
        idd.add(456D);
        L.json(idd);

打印效果:

Map

        User u = new User();
        u.userName = "tony";
        u.password = "123456";
        
        Map<String,User> map = new HashMap<>();
        map.put("tony",u);
        map.put("tt",u);
        L.json(map);

        Map<String,String> map2 = new HashMap<>();
        map2.put("tony","shen");
        map2.put("tt","ziyu");
        L.json(map2);

        Map<String,Boolean> map3 = new HashMap<>();
        map3.put("tony",true);
        map3.put("tt",false);
        L.json(map3);

打印效果:

JSON String

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

        L.json(jsonString);

打印效果:

Reference

        User u = new User();
        u.userName = "tony";
        u.password = "123456";
        
        L.json(new WeakReference<User>(u));

打印效果:

Throwable

L.e(new NullPointerException("this object is null"));

或者

L.json(new NullPointerException("this object is null"));

打印效果:

Bundle

        User u = new User();
        u.userName = "tony";
        u.password = "123456";
        
        Bundle bundle = new Bundle();
        bundle.putString("key1","this is key1");
        bundle.putInt("key2",100);
        bundle.putBoolean("key3",true);
        bundle.putSerializable("key4",u);
        L.json(bundle);

打印效果:

Intent

        User u = new User();
        u.userName = "tony";
        u.password = "123456";
        
        Bundle bundle = new Bundle();
        bundle.putString("key1","this is key1");
        bundle.putInt("key2",100);
        bundle.putBoolean("key3",true);
        bundle.putSerializable("key4",u);

        Intent i = new Intent(this,MainActivity.class);
        i.putExtras(bundle);
        L.json(i);

打印效果:

Uri

        Uri uri = Uri.parse("http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic");
        L.json(uri);

打印效果:

Header

之前公司的产品做过 deep link 以及移动端广告相关的 sdk。从开发这些产品中,我们获得的经验是日志里要是能够记录手机的一些信息,方便根据机型和操作系统版本来调试bug就好了。

由此产生了 L 的Header。通常情况下,把手机的一些信息放入 Header 中,方便调试时一眼识别手机出的机型、操作系统版本号、App版本号等等。一旦定义好 Header,所有使用 L 的日志上都会显示 Header 的内容。

Kotlin

借助 Kotlin 的扩展函数的特性,任何对象都可以使用json()方法来打印其自身。

也支持形如:

L.i {
   "hi $message"
}
L.i("customerTag") {
   "hi $message"
}