Android 开源日志库 Logger 使用教程
2017-05-11 21:54
381 查看
本文为 like_program 原创。
原文地址为: http://blog.csdn.net/like_program/article/details/52986553
当然,有的同学可能要说,这又没什么,自己封装一个 Log 不就行了。但是对新手来说,自己封装有一定的难度,如果有现成的开源库可以直接拿来用就好了。
Github 上的大牛当然也注意到了这个情况,于是开源日志库 Logger 诞生了。
Logger 的 Github 主页:https://github.com/orhanobut/logger
Logger 提供以下功能:
线程的信息
类的信息
方法的信息
将 JSON 文本人性化输出
将换行符人性化输出
简洁的输出
从日志跳转到源码
Logger 与 原生 Log 最大的不同就是:Logger 打印出来的日志一目了然,引用下官方 Github 上的图片,看下原生 Log 和 Logger 打印日志的区别:
原生 Log 打印的日志:
Logger 打印的日志:
可以看到,Logger 打印的日志把多余的日志全部忽略了,只显示对我们有用的日志,而且还把日志框了起来,可以让我们看得更舒服。不得不说,Logger 做的实在是太人性化了。
Logger 使用方法也不难,Logger 开源库的
Github 主页 写了很详细的使用方法,英文还过得去的同学可以直接去 Logger 主页查看使用方法,有英文恐惧症的同学呢,可以通过这篇博客来学习下。
Android Studio,新建 LoggerTest 项目。
2
3
1
2
3
然后 Android Studio 应该会弹出
如果弹出了
等 Grade 构建完,我们就可以使用 Logger了。
修改 MainActivity.Java 中的 onCreate() 方法,代码如下:
2
3
4
5
6
7
1
2
3
4
5
6
7
咦,怎么没写 TAG?其实,Logger 是有它自己默认的 TAG 的,默认的 TAG 是
我们可以看到,已经成功的将日志输出了,而且比我们之前用的原生 Log 输出的美观多了,日志信息一目了然。箭头指向的就是 Logger 默认的 TAG,所以如果你想让 Logcat 只显示你自己打印的日志,可以在日志过滤器中,将默认 TAG 添加进去。
或者直接在过滤框中添加:
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
1
2
3
4
5
6
7
新建 MyApplication 继承 Application,代码如下:
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
修改 AndroidManifest.xml 中 application 的属性,添加
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
这样 App 启动时,初始化的就是我们自定义的 MyApplication 了。然后我们在 MainActivity 的 onCreate() 中打印一下日志,看下自定义的 TAG 生效了没。
2
3
4
5
6
7
1
2
3
4
5
6
7
可以看到,我们自定义的 TAG 已经生效了。那么有的同学可能会有疑问了,我要是不想一直用这个 TAG 呢,要是临时想换个 TAG 用呢,当然也是有办法的,调用
2
3
4
5
6
7
1
2
3
4
5
6
7
可以看到,临时的 TAG 名被追加到自定义 TAG 的后面了。
MyApplication 的 onCreate() 方法:
2
3
4
5
1
2
3
4
5
运行一下,可以发现 Logger 没有打印日志。
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
1
2
3
4
5
有兴趣的同学可以去 Logger 的
Github 主页 查看Logger 的更多用法。
源码下载
原文地址为: 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 打印的日志:
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' }1
2
3
1
2
3
然后 Android Studio 应该会弹出
Sync Now,也就是箭头 1 指向的位置,如图:
如果弹出了
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"); }1
2
3
4
5
6
7
1
2
3
4
5
6
7
咦,怎么没写 TAG?其实,Logger 是有它自己默认的 TAG 的,默认的 TAG 是
PRETTYLOGGER,我们运行一下程序,看一下输出日志:
我们可以看到,已经成功的将日志输出了,而且比我们之前用的原生 Log 输出的美观多了,日志信息一目了然。箭头指向的就是 Logger 默认的 TAG,所以如果你想让 Logcat 只显示你自己打印的日志,可以在日志过滤器中,将默认 TAG 添加进去。
或者直接在过滤框中添加:
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); }1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
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); }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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); }1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
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); }1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
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); }1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
4.字符串格式化
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Logger.d("hello %s %d", "world", 5); }1
2
3
4
5
6
7
1
2
3
4
5
6
7
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); } }1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
修改 AndroidManifest.xml 中 application 的属性,添加
android:name=".MyApplication",AndroidManifest.xml 代码如下:
<applicationandroid:name=".MyApplication"1
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>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
这样 App 启动时,初始化的就是我们自定义的 MyApplication 了。然后我们在 MainActivity 的 onCreate() 中打印一下日志,看下自定义的 TAG 生效了没。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Logger.d("hello world"); }1
2
3
4
5
6
7
1
2
3
4
5
6
7
可以看到,我们自定义的 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"); }1
2
3
4
5
6
7
1
2
3
4
5
6
7
可以看到,临时的 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); }1
2
3
4
5
1
2
3
4
5
运行一下,可以发现 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"); } }1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
8.更多个性化设置
Logger 还有一些个性化设置,比如Logger.init(TAG) .methodCount(3) // 方法栈打印的个数,默认是 2 .hideThreadInfo() // // 隐藏线程信息,默认显示 .methodOffset(2) // 设置调用堆栈的函数偏移值,默认是 0 .logAdapter(new AndroidLogAdapter()); // 自定义一个打印适配器1
2
3
4
5
1
2
3
4
5
有兴趣的同学可以去 Logger 的
Github 主页 查看Logger 的更多用法。
源码下载
相关文章推荐
- Android 开源日志库 Logger 使用教程
- Android 开源日志库 Logger 使用教程
- Android 开源日志库 Logger 使用教程
- Android 开源日志库 Logger 使用教程
- Android开源日志库Logger使用教程
- Android 开源日志库Logger的简单使用
- Android开源日志库Logger的使用
- Android 打印日志之com.orhanobut.logger的开源库
- [原创]adb使用教程v1.1.0-----by-----使用logcat快速抓取android崩溃日志
- 爆料喽!!!开源日志库Logger的使用秘籍
- logger android日志框架使用
- 开源日志库Logger的使用
- Android十大主流开源框架使用教程---OKHTTP使用教程
- Android日志框架darks-logs使用教程
- 爆料喽!!!开源日志库Logger的使用秘籍
- android 开源图表库MPChart最简单使用方法示例教程Demo--折线图 柱状图
- Android开源日志库Logger
- android开源ORM框架OrmLite使用教程
- 美团Android热更新开源框架Robust的使用教程
- Android 开源项目xUtils3使用教程