Android日志打印工具-android-ueueo-log
<h2>android-ueueo-log</h2> <p>android-ueueo-log是Android日志输出工具,对输出的日志信息进行了美化,可以输出Json字符串,Xml字符串和简单的Java对象,并对输出信息进行了格式化。</p> <h2>特性</h2> <ul> <li>输出Json,Xml和Java对象(包括数组,集合,Map),并进行了格式化缩进;</li> <li>输出打印日志的方法调用栈信息;</li> <li>输出当前线程信息;</li> <li>支持将日志存储到文件中;</li> <li>可自由控制日志输出级别;</li> <li>支持日志的拼接组合输出;</li> </ul> <p style="text-align:center"><img src="https://simg.open-open.com/show/0b47a76341dfef8542b573e84593426b.png"></p> <h2>下载和导入</h2> <p>项目中使用Gradle导入:</p> <pre> <code class="language-java">dependencies { compile 'com.ueueo:log:2.1' }</code></pre> <h2>如何使用</h2> <h3>初始化</h3> <p>UELog 共提供了4个初始化方法:</p> <pre> <code class="language-java">UELog.init("AAA"); UELog.init("AAA", 2); UELog.init("AAA", 3, UELogLevel.INFO); UELog.init("AAA", 4, UELogLevel.INFO, true);</code></pre> <p>第一个参数:全局日志打印的Tag(默认为 UEUEO );</p> <p>第二个参数:打印方法调用栈的数量(默认为 1 );</p> <p>第三个参数:指定日志打印级别,只有要输出的日志级别大于等于(>=)此参数值,才会打印。</p> <p>日志级别从低到高分别为:</p> <p>VERBOSE=1,DEBUG=2,INFO=3,WARN=4,ERROR=5,ASSERT=6,NONE=7,当指定为NONE时就不会输出任何日志了;</p> <p>第四个参数:指定日志是否保存到文件中(默认为 false 不保存)。</p> <p>日志文件存储路径为外部存储空间的根目录下 UEUEO 文件夹里,日志文件会根据不同的Tag而存储在不同的文件夹中,当程序运行打印第一条日志时会根据当前时间创建日志文件,并且此次运行都存储在此日志文件中,当退出应用重新启动进程,则会创建新的日志文件。</p> <p>如果不进行任何初始化操作,则所有参数都为默认值。</p> <h3>输出Json,Xml和Java对象</h3> <pre> <code class="language-java">//输出Json字符串 UELog.json("{\"id\":221,\"name\":\"my name is ueueo\",\"desc\":\"this is description!\"}"); //输出Xml字符串 UELog.xml("<?xml version=\"1.0\" encoding=\"UTF-8\"?><html><title>this is a title</title><body>这个是网页</body></html>"); //创建Java对象 User user = new User(); user.id = 102; user.name = "UEUEO"; user.age = 22; //输出对象 UELog.object(user);</code></pre> <p>输出结果分别如下图:</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/288e4d99014a13f5b1130c1fd6840058.png"></p> <h3>输出打印日志的方法调用栈信息</h3> <p style="text-align:center"><img src="https://simg.open-open.com/show/a17f670d3ef7d5d10eb2561acba94cd1.png"></p> <p>上图分别为输出1级方法调用栈,输入3级方法调用栈和不输出方法调用栈的日志输出结果。</p> <p>前两条日志当有方法调用栈输出时,日志信息会通过边框美化输出,而第三条日志因为不需要输出方法调用栈信息,而且日志信息是单行日志,输出时为了不占用控制台输出空间,所以不会添加边框。但是如果输出多行日志则会有边框,例如:</p> <pre> <code class="language-java">UELog.i("第一行日志 \n 换行输出日志");</code></pre> <p>输出结果如下:</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/cbe7015846f6c424c40ec8c94fa5b967.png"></p> <h3>Exception输出</h3> <pre> <code class="language-java">try { Object obj = null; obj.toString(); } catch (Exception e) { UELog.e(e, "空指针异常"); }</code></pre> <p>输出结果如下:</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/a5e0f32d73a83771b3a42e4771cd71c6.png"></p> <h3>输出有不定参数的字符串日志</h3> <pre> <code class="language-java">UELog.i("指定参数的日志输出 参数1:%d 参数2:%s 参数3:%s", 110, "apple", "ueueo");</code></pre> <p>输出结果如下:</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/73ea68f17992e0a53020ff8a4e135e91.png"></p> <h3>设置当前要打印日志的Tag,方法调用栈数量和文件存储</h3> <p>上面说明了,当调用 UELog 的 init 方法进行初始化时,可以指定日志的Tag等配置信息,这些配置影响的是全局的日志输出,但是有些时候我们可能希望当前要输出的日志与 init 方法指定的配置不一样,例如:</p> <p>init 时指定Tag为AAA,但是当前的日志希望Tag为BBB,则:</p> <pre> <code class="language-java">UELog.init("AAA"); UELog.i("输出的日志Tag是AAA"); UELog.tag("BBB").i("输出的日志Tag是AAA"); UELog.i("再次输出的日志Tag是AAA");</code></pre> <p>输出结果如下:</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/f1467226795f6b789eb697b26d2d1634.png"></p> <p>除了可以单独指定Tag外,还可以指定方法调用栈显示数量和是否存储到文件:</p> <pre> <code class="language-java">UELog.tag("BBB").method(3).file(true).i("输出的日志Tag是BBB,显示方法数量为3,并且保存到文件中");</code></pre> <h3>日志的拼接组合输出</h3> <p>为了方便大家理解我所说的日志的拼接组合,我先来举个例子:</p> <p>当发送网络请求时,需要打印请求的URL、请求参数和返回结果,一般的做法是:</p> <pre> <code class="language-java">//打印请求地址 UELog.i("POST http://www.baidu.com/api/gps"); //打印请求参数 UELog.json("{\"id\":221}"); //打印返回结果 UELog.json("{\"name\":\"my name is ueueo\",\"desc\":\"this is description!\"}");</code></pre> <p>也就是分步打印数据,这样打印出来的结果如下:</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/8623cb89a4645c6eed3d228fc642bff5.png"></p> <p>这样看其实也挺清楚明白的,但是当网络请求多线程并发时,上面的日志就有可能变成如下:</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/84401e2c86d212aa2095eac1d26f3396.png"></p> <p>这时候你还能看出谁是谁的参数,谁是谁的结果吗,肯定是不行的,而日志的拼接组合就是为了解决这个问题,我们先来看看下面的日志输出:</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/56340ed3861a2976bfdd01c76d9a83c8.png"></p> <p>看到这样的输出是不是更加的清楚明白,那这个日志是怎样输出的呢?如下:</p> <pre> <code class="language-java">//拼接合并输出 UELog.append("POST http://www.baidu.com/api/gps"); UELog.append("请求参数"); UELog.appendJson("{\"id\":221}"); UELog.append("返回结果"); UELog.json("{\"name\":\"my name is ueueo\",\"desc\":\"this is description!\"}");</code></pre> <p>UELog提供了append方法,可以对多次要输出的内容进行拼接,然后最后一次行的输出,append方法有:</p> <pre> <code class="language-java">UELog.append("字符串");//拼接字符串 UELog.appendJson("{\"id\":221}");//拼接Json字符串 UELog.appendXml("<html></html>");//拼接Xml字符串 UELog.appendObject(obj);//拼接对象</code></pre> <p>也可以这样拼接:</p> <pre> <code class="language-java">UELog.append("字符串").appendJson("{\"id\":221}").appendXml("<html></html>").appendObject(obj).i("输出");</code></pre> <p>append 方法并不会进行日志输出,只有调用了日志输出方法才会最终输出的控制台,输出方法就是:</p> <pre> <code class="language-java">UELog.v("verbose level log"); UELog.d("debug level log"); UELog.i("info level log"); UELog.w("warn level log"); UELog.e("error level log"); UELog.wtf("assert level log"); UELog.json("json string log"); UELog.xml("xml string log"); UELog.object(obj);</code></pre> <p>注意:</p> <ul> <li>其中json,xml和object的输出都是以debug等级输出的;</li> <li>append 方法的调用必须是在同一线程内才有效,所以最好保证你的 append 方法的调用都是在同一个方法里,而且调用日志输出方法输出日志之后, append 拼接的日志将被清空,再次打印的日志将没有之前的拼接信息;</li> </ul> <h3> </h3> <p> </p> <p>来自:http://www.jianshu.com/p/5719e25d970b</p> <p> </p>
本文由用户 waynemysky 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
转载本站原创文章,请注明出处,并保留原始链接、图片水印。
本站是一个以用户分享为主的开源技术平台,欢迎各类分享!