Android强大log框架Logger使用详解
2017-01-31 13:28
393 查看
log信息是开发中最最重要的部分,那么如何更好的捕获信息呢?接下来就让我们了解一下强大的log框架–Logger。
项目地址 https://github.com/orhanobut/logger
线程信息:log在哪个线程
类信息:log在哪个类
方法信息:log在哪个方法的哪一行
漂亮地打印json
漂亮的打印XML
漂亮的换行分割
整洁的输出
跳转到源代码
弥补了“android的logcat的message有字符长度的限制,超过将直接截断”的缺陷
支持参数添加占位符来格式化字符串,Logger.d(“hello %s”, “world”);
支持直接打印List,Set,Map,数组类型等引用类型
指定任意TAG
配置初始化选项
支持自定义CustomLogAdapter实现LogAdapter,替换android.util.Log
配置初始化选项(非必须选项,不配置的情况下会使用系统默认的初始化配置
)
methodCount(3) ,中间方法区数量变为3,每一行代表一个方法。
2.打印不同level的Log
Logger.v(String message); // VERBOSE级别,可添加占位符
Logger.d(Object object); // DEBUG级别,打印对象
Logger.d(String message); // DEBUG级别,可添加占位符
Logger.i(String message); // INFO级别,可添加占位符
Logger.w(String message); // WARN级别,可添加占位符
Logger.e(String message); // ERROR级别,可添加占位符
Logger.e(Throwable throwable, String message); // ERROR级别,可添加占位符
Logger.wtf(String message); // ASSERT级别,可添加占位符
Logger.xml(String xml);
Logger.json(String json);
扫码关注公众号“伟大程序猿的诞生“,更多干货等着你~
扫码关注公众号“伟大程序猿的诞生“,更多干货等着你~
扫码关注公众号“伟大程序猿的诞生“,更多干货等着你~
公众号回复“资料获取”,获取更多干货哦~
什么是logger?
是一个简单,漂亮,强大的Android开源日志工具,代码托管在github上项目地址 https://github.com/orhanobut/logger
亮点?
能够提供:线程信息:log在哪个线程
类信息:log在哪个类
方法信息:log在哪个方法的哪一行
漂亮地打印json
漂亮的打印XML
漂亮的换行分割
整洁的输出
跳转到源代码
为啥使用它?
默认实现是对于android.util.Log的封装弥补了“android的logcat的message有字符长度的限制,超过将直接截断”的缺陷
支持参数添加占位符来格式化字符串,Logger.d(“hello %s”, “world”);
支持直接打印List,Set,Map,数组类型等引用类型
指定任意TAG
配置初始化选项
支持自定义CustomLogAdapter实现LogAdapter,替换android.util.Log
如何使用?
添加依赖:compile 'com.orhanobut:logger:1.15'
配置初始化选项(非必须选项,不配置的情况下会使用系统默认的初始化配置
)
Logger .init("mytag") //LOG TAG默认是PRETTYLOGGER .methodCount(3) // 决定打印多少行(每一行代表一个方法)默认:2 .hideThreadInfo() // 隐藏线程信息 默认:显示 .logLevel(LogLevel.NONE) // 是否显示Log 默认:LogLevel.FULL(全部显示) .methodOffset(2) // 默认:0 .logAdapter(new AndroidLogAdapter()); //可以自己构造适配器默认:AndroidLogAdapter }
效果展示:
默认效果:Logger.init().logLevel(LogLevel.FULL).methodCount(3);
methodCount(3) ,中间方法区数量变为3,每一行代表一个方法。
2.打印不同level的Log
Logger.v(String message); // VERBOSE级别,可添加占位符
Logger.d(Object object); // DEBUG级别,打印对象
Logger.d(String message); // DEBUG级别,可添加占位符
Logger.i(String message); // INFO级别,可添加占位符
Logger.w(String message); // WARN级别,可添加占位符
Logger.e(String message); // ERROR级别,可添加占位符
Logger.e(Throwable throwable, String message); // ERROR级别,可添加占位符
Logger.wtf(String message); // ASSERT级别,可添加占位符
Logger.xml(String xml);
Logger.json(String json);
效果展示:
Logger.v("vvvvvvvv");
Logger.d("dddddddd");
Logger.e("eeeeeeee");
Logger.w("wwwwwwww");
Logger.v("vvvvvvvv");
Logger.wtf("wtfwtf");
Logger.json("{\n" + " \"name\": \"BeJson\",\n" + " \"url\": \"http://www.bejson.com\",\n" + " \"page\": 88,\n" + " \"isNonProfit\": true,\n" + " \"address\": {\n" + " \"street\": \"科技园路.\",\n" + " \"city\": \"江苏苏州\",\n" + " \"country\": \"中国\"\n" + " },\n" + " \"links\": [\n" + " {\n" + " \"name\": \"Google\",\n" + " \"url\": \"http://www.google.com\"\n" + " },\n" + " {\n" + " \"name\": \"Baidu\",\n" + " \"url\": \"http://www.baidu.com\"\n" + " },\n" + " {\n" + " \"name\": \"SoSo\",\n" + " \"url\": \"http://www.SoSo.com\"\n" + " }\n" + " ]\n" + "}");
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); methodA(); } void methodA(){ methodB(); } void methodB(){ Logger.d("methodB","sas","asdasdasd",1); }
Logger.xml("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<android.support.constraint.ConstraintLayout\n" + " xmlns:android=\"http://schemas.android.com/apk/res/android\"\n" + " xmlns:tools=\"http://schemas.android.com/tools\"\n" + " xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n" + " android:id=\"@+id/activity_main\"\n" + " android:layout_width=\"match_parent\"\n" + " android:layout_height=\"match_parent\"\n" + " tools:context=\"com.libin.multi.tools.MainActivity\">\n" + "\n" + " <TextView\n" + " android:layout_width=\"wrap_content\"\n" + " android:layout_height=\"wrap_content\"\n" + " android:text=\"Hello World!\"\n" + " app:layout_constraintBottom_toBottomOf=\"@+id/activity_main\"\n" + " app:layout_constraintLeft_toLeftOf=\"@+id/activity_main\"\n" + " app:layout_constraintRight_toRightOf=\"@+id/activity_main\"\n" + " app:layout_constraintTop_toTopOf=\"@+id/activity_main\" />\n" + " \n" + " <ImageView\n" + " android:layout_width=\"wrap_content\"\n" + " android:layout_height=\"wrap_content\" />\n" + " \n" + " <TextView\n" + " android:layout_width=\"wrap_content\"\n" + " android:layout_height=\"wrap_content\" />\n" + "\n" + "</android.support.constraint.ConstraintLayout>\n");
new Thread(new Runnable() { @Override public void run() { Logger.e("Thread"); } }).start();
扫码关注公众号“伟大程序猿的诞生“,更多干货等着你~
扫码关注公众号“伟大程序猿的诞生“,更多干货等着你~
扫码关注公众号“伟大程序猿的诞生“,更多干货等着你~
公众号回复“资料获取”,获取更多干货哦~
相关文章推荐
- Android强大log框架Logger使用详解
- 详解Android首选项框架的使用
- Preference---详解Android首选项框架的使用
- [转]Android-网络通信框架Volley使用详解
- Retrofit 2.0使用详解,配合OkHttp、Gson,Android最强网络请求框架
- Android图片缓存框架Android-Universal-Image-Loader的使用详解
- 详解Android首选项框架的使用
- Android Volley框架使用详解
- Android平台免Root无侵入AOP框架Dexposed使用详解
- Android-网络通信框架Volley使用详解
- 【FastDev4Android框架开发】AndroidAnnnotations注入框架使用之Injection标签详解(十)
- 详解Android首选项框架的使用
- 详解Android首选项框架的使用
- 详解Android首选项框架的使用
- Android平台免Root无侵入AOP框架Dexposed使用详解
- Android 快速开发框架AndroidAnnotations使用详解
- 详解Android首选项框架的使用
- 【FastDev4Android框架开发】Android 数据缓存器ACache的详解和使用(四)
- Android平台免Root无侵入AOP框架Dexposed使用详解
- Android最火框架XUtils的使用详解