安卓轻量级日志框架Logger的使用

版权声明:转载必须注明本文转自郭子轩的博客 https://blog.csdn.net/gpf1320253667/article/details/83959312

优点

1,线程信息:log在哪个线程
2,类信息:log在哪个类
3,方法信息:log在哪个方法的哪一行
4,各种集合输出:list、map、array、set等,(只支持debug输出
5,将 json、xml 格式化后输出
6,支持参数添加占位符来格式化字符串,Logger.d(“hello %s”, “world”);
7,支持从日志跳转到源码
8,弥补了“android的logcat的message有字符长度的限制,超过将直接截断”的缺陷
9,漂亮的换行分割,整洁的输出
10,指定任意TAG

如何使用

1,添加依赖

compile 'com.orhanobut:logger:2.2.0'

2,在application的onCreate方法中进行初始化

Logger.addLogAdapter(new AndroidLogAdapter());

以上初始化方式使用的均是框架的默认配置,我们也可以自定义这些配置:
一般我们可能只需要定义一下全局的TAG标记。

FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder()
  .showThreadInfo(false)      //(可选)是否显示线程信息。 默认值为true
  .methodCount(2)             // (可选)要显示的方法行数。 默认2
  .methodOffset(7)            // (可选)设置调用堆栈的函数偏移值,0的话则从打印该Log的函数开始输出堆栈信息,默认是0
  .logStrategy(customLog)     //(可选)更改要打印的日志策略。 默认LogCat
  .tag("MyTAG")               //(可选)每个日志的全局标记。 默认PRETTY_LOGGER(如上图)
  .build();
Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));

3,然后就可以使用了

Logger.d("debug日志");
Logger.e("error日志");
Logger.i("info日志");
Logger.w("warning");
Logger.v("verbose");
Logger.wtf("wtf!!!!");

在这里插入图片描述
从图上也可以看出,框架默认的TAG为PRETTY_LOGGER。

可添加占位符

Logger.d("hello %s, luck number is %d", "world", 5);

在这里插入图片描述

可直接打印集合,数组等引用类型

       /**
         * List
         */
       List list = new ArrayList();
       list.add("hello");
       list.add("world");
       Logger.d(list);
       
        /**
         * Map
         */
        Map map = new HashMap();
        map.put("map1","hello");
        map.put("map2","world");
        Logger.d(map);
 
        /**
         * Set
         */
        Set set = new HashSet();
        set.add("hello");
        set.add("world");
        Logger.d(set);
 
        /**
         * Array
         */
        String [] strs = {"hello", "world"};
        Logger.d(strs);

在这里插入图片描述
在这里插入图片描述
注:
1,打印集合的时候,特别是数组时,前面不要添加其他字符,如:Logger.d(“数组集合”+strs);这样会把整体当做一个参数,导致判断错误,不能正常输出数组类型。
2,打印集合时,使用DEBUG等级。

打印JSON数据

public void testJson(){
        String jsonDate = "{\"id\":859,\"channelnumber\":681,\"bilingual\":0,\"name\":\"beIN Sports 2 English 600K H265\",\n" +
                " \"language\":\"EN\",\n" +
                " \"videotype\":\"MPEG2\",\"audiotype\":\"MPEP1\",\"callsign\":\"beIN Sports 2 English 600K H265\",\"country\":\"cn\"};";
 
        Logger.json(jsonDate);
        Log.d(TAG, jsonDate);
    }

在这里插入图片描述

打印XML数据

public void testXml() {
        String xmlDate = "<province id=\"01\" name=\"北京\">  \n" +
                "    <city id=\"0101\" name=\"北京\">  \n" +
                "      <county id=\"010101\" name=\"北京\" weatherCode=\"101010100\"/>  \n" +
                "      <county id=\"010102\" name=\"海淀\" weatherCode=\"101010200\"/>  \n" +
                "      <county id=\"010103\" name=\"朝阳\" weatherCode=\"101010300\"/>  \n" +
                "      <county id=\"010110\" name=\"石景山\" weatherCode=\"101011000\"/>  \n" +
                "    </city>  \n" +
                "  </province>  ";
        Logger.xml(xmlDate);
        Log.d(TAG, xmlDate);
    }

在这里插入图片描述

局部定义TAG

public void testNormal(){
        Logger.t("hello").d("DEBUG日志");
        Logger.i("INFO日志");
    }

在这里插入图片描述
默认是在PRETTY_LOGGER后面拼接你的tag打印。

根据构建的应用版本来动态决定是否输出log

这样我们就再也不用通过手动配置true或者false来确定发布的版本了。
1,首先建议在app的build.gradle配置文件中自定义一个BuildConfig字段,语法格式如下:

buildConfigField "boolean", "LOG_DEBUG", "true"

上述语法就定义了一个boolean类型的LOG_DEBUG字段,值为true,该字段编译后自动生成。之后我们就可以在程序中通过BuildConfig.LOG_DEBUG来调用我们设置的字段值了。此处我们目的是为了自定义一个字段来动态控制不同版本下LOG日志的打印,所以我们先去app的build.gradle中创建一个Boolean的变量:

buildTypes {
        release {
            ...
            buildConfigField "boolean" , "LOG_DEBUG" , "false"
            ...
        }
        debug {
            ...
            buildConfigField "boolean" , "LOG_DEBUG" , "true"
            ...
        }
    }

虽然在Gradle脚本中默认的debug和release两种模式BuildCondig.DEBUG字段分别为true和false,而且不可更改,但一般不建议直接使用该值,我们可以自定义添加新的字段,关于Android Studio中Gradle的其他妙用请查看本人的博客:安卓项目实战之:gradle配置中BuildConfig自定义字段的妙用
2,然后在application初始化的地方:

Logger.addLogAdapter(new AndroidLogAdapter() {
  @Override 
  public boolean isLoggable(int priority, String tag) {
       return BuildConfig.LOG_DEBUG;
  }
});

通过适配器控制打印,只要覆盖isLoggable()方法,返回一个boolean值即可。如果返回true,将会打印日志信息,如果返回false,那么会忽略它。
注意:返回值导入的包是:import com.orhanobut.logger.BuildConfig; 有时顺手导入:com.gotechcn.frameworks,那就没有效果。

保存log到文件

要想将log保存到文件,只需要设置一个适配器就好了,但是需要注意如下两点:
1,Logger默认写入到本地的文件格式是csv格式,使用excel打开是这样的
在这里插入图片描述
可能你并不习惯,你还是想用txt
那么需要自定义一个CustomDiskStrategy类实现LogStrategy接口

将DiskLogStrategy的实现代码copy过去然后,修改下面代码中的csv为txt就好了:
在这里插入图片描述
但由于LogStrategy都是在FormatStrategy内部配置的,所有我们还需要自定义一个CustomFormatStrategy类,其实也是可以简单复制CvsFormateStrategy类,然后用我们刚才自定义的CustomDiskStrategy替换掉里面所有的DiskLogStrategy就好了!

2,如果你既需要在logCat中打印出log,同时又想将日志写入文件中,那么你需要为logger添加两个Adapter,例如下图所示,可以同时配置自定义的TxtFormateStrategy(或者自带的CvsFormateStrategy)和它自带的PrettyFormategy,如果只配置其中一个那么只会使其只具有相应的一个功能,所以如果既要保存到文件又要显示在logCat必须配置两个adapter。
在这里插入图片描述

如下的适配器也会将log日志保存到文件。

Logger.addLogAdapter(new DiskLogAdapter());

该适配器同样也可以重新配置默认的参数,但会有点不同,配置的是日期格式等。
通过打印,找到保存的路径: /storage/emulated/0

设置android studio中LogCat信息五颜六色

进入studio的settings界面,在输入框搜索logcat进入logcat设置界面,如下:
在这里插入图片描述
点击“Save As”自己新建一个style配置,然后依次点击选中一个日志级别,将Use Inberited attributes 的勾选去掉,再将 Foreground 前的复选框选上,双击后面的框框去选择想要设置的颜色,一一设置完后,点击apply,然后再点击ok。

Log日志级别 推荐颜色值 类型
VERBOSE BBBBBB 琐碎的,意义最小的信息
DEBUG 2770BB 调试信息,调试程序时
INFO 9CBB61 数据信息,可用来分析用户行为
WARN C78537 警告信息,存在潜在风险
ERROR FF6B68 错误信息,存在严重错误
ASSERT FF3920 断言失败信息

Logcat日志信息的设置和过滤

左侧小工具栏的设置图标:用于对日志显示的内容进行设置,包括:时间、进程号、包名、Tag的显示与否。
过滤
在这里插入图片描述
上面的中间部分可以设置日志级别方面的过滤,后面的搜索栏用来搜索日志中出现的字符串。
Regex代表是否进行模糊匹配
最后面的下拉选择栏主要是用来设置日志过滤方式,如下:
在这里插入图片描述
如果要显示自己APP全部日志,选择show only selected application
如果只需要显示指定的日志信息,这时候我们就可以自己设置日志过滤规则:
点击Edit Filter Configuration选项,弹出如下对话框:
在这里插入图片描述
有四种过滤方式:
Log Tag

使用标签方式,如果你在文件中使用Log.d(Tag,logMessage) 这个tag标识就是你要设置的tag.

Log Message
日志信息

Package Name
根据应用程序的包名

PID
根据应用程序ID

后面的Regex表示是否模糊匹配日志
如果项目中使用了Logger日志框架,在没有自定义TAG的情况下我们知道框架默认的TAG是PRETTY_LOGGER,所以我们就可以这样设置:
在这里插入图片描述
这样就只会显示我们使用Logger框架输出的日志信息了。

猜你喜欢

转载自blog.csdn.net/gpf1320253667/article/details/83959312
今日推荐