美团开源日志框架Logan初探

最近群里的美团童靴发了个链接,说自家的日志框架Logan开源了,地址为Logan,中文介绍地址为Logan。闲的无聊就体验了一把,如果你想了解一下,不妨花点时间阅读一下本文。

首先非常感谢美团童靴大公无私的精神,将自己的心血开源。自己也学习了一波,这个框架使用起来非常简单,方法非常少,大致的使用步骤分为以下几步:

  1. 初始化LoganConfig 你可以在application中初始化,也可以在Activity中初始化,只要你用之前初始化就可以了,config使用了builder模式,非常容易理解:

gradle.build:

implementation 'com.dianping.android.sdk:logan:1.0.0'

初始化配置:

LoganConfig config = new LoganConfig.Builder().
                setCachePath(getFilesDir().getAbsolutePath())
                .setPath(getExternalFilesDir(null).getAbsolutePath() + File.separator + "logan_v1")
                .setEncryptKey16("0123456789012345".getBytes())    //加密模式
                .setEncryptIV16("0123456789012345".getBytes())      //加密模式
                .build();
Logan.init(config);

因为美团非常注重隐私模式,所有会存在16位ase加密Key16位aes加密IV,这里不做重点,只需要记得加密的key就行。

  1. 添加日志
 //设置debug模式
 Logan.setDebug(true);
 //开始写日志
 Logan.w("this is the log ",1);
//立即写入日志
 Logan.f();
  1. 日志上传&日志解密
    刚开始接触这个日志框架时,感觉比较懵逼,没有提供本地查看的机制,只能上传并解密之后才能查看。
    上传时需要继承com.dianping.logan.SendLogRunnable.SendLogRunnable并实现sendLog
    方法,方法中的参数是需要上传的文件,当然你上传到哪里去是你的事,不过文件上传之后,并不能直接使用,还需要专门的解密工具,美团也提供了node.js服务器,传入文件,得到解密之后的文件,才可以去分析相关的日志逻辑。为此,美团专门写了如何解析解密后的日志文件,为此就不多了。自己可以看一下。

  2. 查看自己的日志文件
    我的界面如下:
    美团开源日志框架Logan初探_第1张图片
    代码也是相当的简单:

public void inputLog1(View view) {
        Logan.w("log one",1);
        Logan.w("log one",1);
        Logan.w("log one",1);
        Logan.w("log one",1);
    }

    public void inputLog3(View view) {
        Logan.w("log two", 2);
        Logan.w("log two", 2);
        Logan.w("log two", 2);
        Logan.w("log two", 2);
        Logan.w("log two", 2);
    }
    
    public void inputLog2(View view) {
        Logan.w("log three",3);
        Logan.w("log three",3);
        Logan.w("log three",3);
        Logan.w("log three",3);
        Logan.w("log three",3);
    }

一顿乱点之后,上传至自己的服务器,然后解密之后,得到的类似如下的数据:
美团开源日志框架Logan初探_第2张图片
本着简介的态度,Logan框架将每一条日志只用了5个字段记录,分别是:

字段 含义 举例
c log-content 日志的内容 long one
f flag-key 日志的标记 1
l local-time 日志的当地时间 1539611498547
n threadname_key 写当前日志的线程名 main/thread-24
i threadid_key 写当前日志的线程id 1
m ismain_key 是否在主线程中运行 true/false

这些定义都可以在construct_data.c源码中找到定义,一条简单清晰的日志就可以展示在你的面前了。

说了这么多,那么就说说自己的看法吧。

既然Logan号称承受过千亿量级的考验,那么就一定有它的长处,但是现在[18年10月17号]处于开源的1.0.0版本,有很多功能需要完善,日志获取也不是很完美,日志的模式也比较单一,但是我们有理由相信经过大家的努力,Logan会越发优秀。

当然Logan真正距离线上环境还需要一段时间,毕竟后台还没有开源,那就让我们敬请期待吧。

项目中遇到的问题:

  1. 机型为小米4x,后台上报的数据中发现只有主线程数据,不存在子线程写入数据,后来咨询了相关开发人员,链接为:https://github.com/Meituan-Dianping/Logan/issues/20 。告知使用子线程时不使用Logan.f()刷新方法,后来发现数据可以写入:
    美团开源日志框架Logan初探_第3张图片

你可能感兴趣的:(android进阶,android)