Android 开源日志库 Logger 使用教程

大鹏一日同风起,扶摇直上九万里。这篇文章主要讲述Android 开源日志库 Logger 使用教程相关的知识,希望能为你提供帮助。

本篇文章已授权微信公众号 guolin_blog ( 郭霖) 独家发布
转载请注明出处: http://blog.csdn.net/like_program/article/details/52986553
1.Logger 是什么 在我们日常的开发中, 肯定是少不了要和 Log 打交道, 回想一下我们是怎么使用 Log 的: 先定义一个静态常量 TAG, TAG 的值通常是当前类的类名, 然后在需要打印 Log 的地方, 调用 Log.d(TAG, " 要打印的内容" )。每次新写一个类, 都要写一个 TAG, 这也就算了, 最苦逼的是, 项目一上线, 还要手动去把每个 Log 注释掉。。。
当然, 有的同学可能要说, 这又没什么, 自己封装一个 Log 不就行了。但是对新手来说, 自己封装有一定的难度, 如果有现成的开源库可以直接拿来用就好了。
Github 上的大牛当然也注意到了这个情况, 于是开源日志库 Logger 诞生了。
Logger 的 Github 主页: https://github.com/orhanobut/logger
Logger 提供以下功能:
  • 线程的信息
  • 类的信息
  • 方法的信息
  • 将 JSON 文本人性化输出
  • 将换行符人性化输出
  • 简洁的输出
  • 从日志跳转到源码
Logger 与 原生 Log 最大的不同就是: Logger 打印出来的日志一目了然, 引用下官方 Github 上的图片, 看下原生 Log 和 Logger 打印日志的区别:
原生 Log 打印的日志:
Android 开源日志库 Logger 使用教程

文章图片

Logger 打印的日志:
Android 开源日志库 Logger 使用教程

文章图片

可以看到, Logger 打印的日志把多余的日志全部忽略了, 只显示对我们有用的日志, 而且还把日志框了起来, 可以让我们看得更舒服。不得不说, Logger 做的实在是太人性化了。
Logger 使用方法也不难, Logger 开源库的 Github 主页 写了很详细的使用方法, 英文还过得去的同学可以直接去 Logger 主页查看使用方法, 有英文恐惧症的同学呢, 可以通过这篇博客来学习下。
2.Logger 的使用 打开 android Studio, 新建 LoggerTest 项目。
1.导入依赖 在 LoggerTest / app/ build.gradle 中的 dependencies 中, 导入依赖, 代码如下:
dependencies { compile ' com.orhanobut:logger:1.15' }

然后 Android Studio 应该会弹出 Sync Now, 也就是箭头 1 指向的位置, 如图:
Android 开源日志库 Logger 使用教程

文章图片

如果弹出了 Sync Now, 就点击它, 如果没有弹出, 就点击箭头 2 指向的选项。
等 Grade 构建完, 我们就可以使用 Logger了。
2.简单使用 Logger 的使用方法和原生 Log 差不多, 我们先来尝试下打印一个简单文本。
修改 MainActivity.java 中的 onCreate() 方法, 代码如下:
@ Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Logger.d(" 执行了 onCreate" ); }

咦, 怎么没写 TAG? 其实, Logger 是有它自己默认的 TAG 的, 默认的 TAG 是 PRETTYLOGGER, 我们运行一下程序, 看一下输出日志:
Android 开源日志库 Logger 使用教程

文章图片

我们可以看到, 已经成功的将日志输出了, 而且比我们之前用的原生 Log 输出的美观多了, 日志信息一目了然。箭头指向的就是 Logger 默认的 TAG, 所以如果你想让 Logcat 只显示你自己打印的日志, 可以在日志过滤器中, 将默认 TAG 添加进去。
Android 开源日志库 Logger 使用教程

文章图片

Android 开源日志库 Logger 使用教程

文章图片

或者直接在过滤框中添加:
Android 开源日志库 Logger 使用教程

文章图片

3.打印更多类型数据 Logger 还支持打印 JSON, XML 等格式的数据。
1.JSON 类型数据
private String JSON_CONTENT = " {\\" weatherinfo\\" :{\\" city\\" :\\" 北京\\" ,\\" cityid\\" :\\" 101010100\\" ," + " \\" temp\\" :\\" 18\\" ,\\" WD\\" :\\" 东南风\\" ,\\" WS\\" :\\" 1级\\" ,\\" SD\\" :\\" 17%\\" ,\\" WSE\\" :\\" 1\\" ," + " \\" time\\" :\\" 17:05\\" ,\\" isRadar\\" :\\" 1\\" ,\\" Radar\\" :\\" JC_RADAR_AZ9010_JB\\" ," + " \\" njd\\" :\\" 暂无实况\\" ,\\" qy\\" :\\" 1011\\" ,\\" rain\\" :\\" 0\\" }}" ; @ Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Logger.json(JSON_CONTENT); }

Android 开源日志库 Logger 使用教程

文章图片

2.XML 类型数据
private String XML_CONTENT = " < china dn= \\" nay\\" > < city quName= \\" 黑龙江\\" pyName= \\" heilongjiang\\" " + " cityname= \\" 哈尔滨\\" state1= \\" 1\\" state2= \\" 1\\" stateDetailed= \\" 多云\\" /> < city quName= \\" 吉林\\" " + " pyName= \\" jilin\\" " + " cityname= \\" 长春\\" state1= \\" 0\\" state2= \\" 0\\" stateDetailed= \\" 晴\\" /> < city quName= \\" 辽宁\\" " + " pyName= \\" liaoning\\" " + " cityname= \\" 沈阳\\" state1= \\" 1\\" state2= \\" 0\\" stateDetailed= \\" 多云转晴\\" /> < city " + " quName= \\" 海南\\" pyName= \\" hainan\\" " + " cityname= \\" 海口\\" state1= \\" 22\\" state2= \\" 21\\" stateDetailed= \\" 中到大雨转小到中雨\\" /> < /china> " ; @ Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Logger.xml(XML_CONTENT); }

【Android 开源日志库 Logger 使用教程】
Android 开源日志库 Logger 使用教程

文章图片

3.List 类型数据
@ Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // List 类型数据 List< String> list = new ArrayList< > (); list.add(" hello" ); list.add(" world" ); Logger.d(list); }

Android 开源日志库 Logger 使用教程

文章图片

4.Map 类型数据
@ Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Map 类型数据 Map< String, String> map = new HashMap< > (); map.put(" key_hello" , " hello" ); map.put(" key_world" , " world" ); Logger.d(map); }

Android 开源日志库 Logger 使用教程

文章图片

5.Set 类型数据
@ Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Set 类型数据 Set< String> set = new HashSet< > (); set.add(new String(" hello" )); set.add(new String(" world" )); Logger.d(set); }

Android 开源日志库 Logger 使用教程

文章图片

4.字符串格式化
@ Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Logger.d(" hello %s %d" , " world" , 5); }

Android 开源日志库 Logger 使用教程

文章图片

5.自定义 TAG 如果你不满意默认的 TAG, 也可以自己定义一个 TAG, 只需要调用一次 Logger.init() 就行了。因为只需要调用一次, 所以可以在 Application 中来完成 Logger 的初始化。
新建 MyApplication 继承 Application, 代码如下:
public class MyApplication extends Application {private static String TAG = " LoggerTest" ; @ Override public void onCreate() { super.onCreate(); Logger.init(TAG); } }

修改 AndroidManifest.xml 中 application 的属性, 添加 android:name= " .MyApplication" , AndroidManifest.xml 代码如下:
< application android:name= " .MyApplication" android:allowBackup= " true" android:icon= " @ mipmap/ic_launcher" android:label= " @ string/app_name" android:supportsRtl= " true" android:theme= " @ style/AppTheme" > < activity android:name= " .MainActivity" > < intent-filter> < action android:name= " android.intent.action.MAIN" /> < category android:name= " android.intent.category.LAUNCHER" /> < /intent-filter> < /activity> < /application>

这样 App 启动时, 初始化的就是我们自定义的 MyApplication 了。然后我们在 MainActivity 的 onCreate() 中打印一下日志, 看下自定义的 TAG 生效了没。
@ Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Logger.d(" hello world" ); }

Android 开源日志库 Logger 使用教程

文章图片

可以看到, 我们自定义的 TAG 已经生效了。那么有的同学可能会有疑问了, 我要是不想一直用这个 TAG 呢, 要是临时想换个 TAG 用呢, 当然也是有办法的, 调用 Logger.t(" 临时TAG名" ).d() , 就能使用临时的 TAG 打印日志了。
@ Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Logger.t(" MyTag" ).d(" hello world" ); }

Android 开源日志库 Logger 使用教程

文章图片

可以看到, 临时的 TAG 名被追加到自定义 TAG 的后面了。
6.设置不打印日志 之前说了, 日志只是开发的时候需要用到, 等到项目上线就不能用了。Logger 当然也考虑到了这一点, 通过设置 Logger.init(TAG).logLevel(LogLevel.NONE) 可以设置为不打印日志。logLevel() 方法默认的参数是 LogLevel.FULL, 也就是打印全部日志。修改 MyApplication 的 onCreate() 方法:
@ Override public void onCreate() { super.onCreate(); Logger.init(TAG).logLevel(LogLevel.NONE); }

运行一下, 可以发现 Logger 没有打印日志。
7.打印 Exception Logger 打印 Exception, 可以很清晰的看到 Exception 信息, 这里我们写一个数组越界异常:
@ Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); int[] a = new int[3]; try { a[4] = 3; } catch (Exception e) { Logger.e(e, " message" ); } }

Android 开源日志库 Logger 使用教程

文章图片

8.更多个性化设置 Logger 还有一些个性化设置, 比如
Logger.init(TAG) .methodCount(3) // 方法栈打印的个数, 默认是 2 .hideThreadInfo() // // 隐藏线程信息, 默认显示 .methodOffset(2) // 设置调用堆栈的函数偏移值, 默认是 0 .logAdapter(new AndroidLogAdapter()); // 自定义一个打印适配器

有兴趣的同学可以去 Logger 的 Github 主页 查看Logger 的更多用法。
源码下载

    推荐阅读