关注finddreams,一起分享,一起进步!http://blog.csdn.net/finddreams/article/details/45569089 
   
  在开发中,我们常常用打印log的方式来调试我们的应用。在Java中我们常常使用方法System.out.println()来在控制台打印日志,以便我们的调试。Android中有一个专门的类Log来实现在Android系统下日志的打印,更加方便我们定位程序出现问题的地方。 
   
  但是Android官方提供的Log类在实际项目使用中,也不是非常方便。当程序出现错误时,我们最希望的就是这个Log类能帮我们定位到是哪个类的哪个方法,甚至于是那一行出现了错误。这样就能给我们的调试带来很大的便利。 
   
  同时我们也应该想到为了应用程序的安全起见,在app正式上线之前,我们应该要把打印日志的功能关闭掉,以防别人通过Log来破解你的应用。生产模式的下打印Log,正式模式就把打印日志的功能关闭掉,要做到Log的灵活关闭与打开,也需要在原生的Log类上进行一些封装。 
   
  还有一种时候,当我们的程序出现问题崩溃了,我们希望能够收集到出现异常的原因进行分析,所以可以把Log日志保存到一个文件中,放在SD卡程序创建的目录下。也可以在用户联网的情况下,在程序的后台把出异常的Log日志文件上传到服务端,方便程序员进行分析,解决bug。 
   
  今天就给大家分享一个做项目中很实用的一个Log类LogUtils,这个类是从xUtils中提取出来,稍作修改的,有注释。 
   
  示例: 
  我们在MainActivity中调用一些LogUtils中的方法,注意看行数。 
   
 

 接着看看控制台打印的日志是不是像MainActivity调用的那样,Log中有这个类的名字和oncreate方法名,已及当前行数; 
  

  看到上图中的Log日志是不是很方便定位程序中的问题了,出现异常也能快速的定位到。然后把下面的Log类型在程序的任何地方设置为false则不会打印日志,使用起来相当的方便。 
 

<code class="hljs java has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 容许打印日志的类型,默认是true,设置为false则不打印</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">boolean</span> allowD = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">boolean</span> allowE = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">boolean</span> allowI = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">boolean</span> allowV = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">boolean</span> allowW = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">boolean</span> allowWtf = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>;</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li></ul>

代码贴在下面:

<code class="hljs java has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">package</span> com.finddreams.log;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java.io.BufferedWriter;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java.io.File;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java.io.FileOutputStream;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java.io.IOException;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java.io.OutputStreamWriter;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java.text.SimpleDateFormat;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java.util.Date;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java.util.Formatter;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java.util.Locale;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.os.Environment;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.text.TextUtils;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.util.Log;<span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*** Log工具,类似android.util.Log。 tag自动产生,格式:* customTagPrefix:className.methodName(Line:lineNumber),* customTagPrefix为空时只输出:className.methodName(Line:lineNumber)。* http://blog.csdn.net/finddreams*/</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">LogUtils</span> {</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> String customTagPrefix = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"finddreams"</span>; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 自定义Tag的前缀,可以是作者名</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">boolean</span> isSaveLog = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 是否把保存日志到SD卡中</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> String ROOT = Environment.getExternalStorageDirectory().getPath() + <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/finddreams/"</span>; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// SD卡中的根目录</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> String PATH_LOG_INFO = ROOT + <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"info/"</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-title" style="box-sizing: border-box;">LogUtils</span>() {}<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 容许打印日志的类型,默认是true,设置为false则不打印</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">boolean</span> allowD = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">boolean</span> allowE = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">boolean</span> allowI = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">boolean</span> allowV = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">boolean</span> allowW = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">boolean</span> allowWtf = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> String <span class="hljs-title" style="box-sizing: border-box;">generateTag</span>(StackTraceElement caller) {String tag = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"%s.%s(Line:%d)"</span>; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 占位符</span>String callerClazzName = caller.getClassName(); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 获取到类名</span>callerClazzName = callerClazzName.substring(callerClazzName.lastIndexOf(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"."</span>) + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>);tag = String.format(tag, callerClazzName, caller.getMethodName(),caller.getLineNumber()); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 替换</span>tag = TextUtils.isEmpty(customTagPrefix) ? tag : customTagPrefix + <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">":"</span>+ tag;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> tag;}<span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*** 自定义的logger*/</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> CustomLogger customLogger;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">interface</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">CustomLogger</span> {</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> d(String tag, String content);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> d(String tag, String content, Throwable tr);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> e(String tag, String content);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> e(String tag, String content, Throwable tr);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> i(String tag, String content);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> i(String tag, String content, Throwable tr);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> v(String tag, String content);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> v(String tag, String content, Throwable tr);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> w(String tag, String content);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> w(String tag, String content, Throwable tr);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> w(String tag, Throwable tr);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> wtf(String tag, String content);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> wtf(String tag, String content, Throwable tr);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> wtf(String tag, Throwable tr);}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">d</span>(String content) {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!allowD)<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;StackTraceElement caller = getCallerStackTraceElement();String tag = generateTag(caller);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (customLogger != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {customLogger.d(tag, content);} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {Log.d(tag, content);}}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">d</span>(String content, Throwable tr) {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!allowD)<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;StackTraceElement caller = getCallerStackTraceElement();String tag = generateTag(caller);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (customLogger != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {customLogger.d(tag, content, tr);} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {Log.d(tag, content, tr);}}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">e</span>(String content) {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!allowE)<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;StackTraceElement caller = getCallerStackTraceElement();String tag = generateTag(caller);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (customLogger != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {customLogger.e(tag, content);} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {Log.e(tag, content);}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (isSaveLog) {point(PATH_LOG_INFO, tag, content);}}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">e</span>(String content, Throwable tr) {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!allowE)<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;StackTraceElement caller = getCallerStackTraceElement();String tag = generateTag(caller);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (customLogger != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {customLogger.e(tag, content, tr);} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {Log.e(tag, content, tr);}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (isSaveLog) {point(PATH_LOG_INFO, tag, tr.getMessage());}}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">i</span>(String content) {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!allowI)<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;StackTraceElement caller = getCallerStackTraceElement();String tag = generateTag(caller);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (customLogger != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {customLogger.i(tag, content);} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {Log.i(tag, content);}}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">i</span>(String content, Throwable tr) {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!allowI)<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;StackTraceElement caller = getCallerStackTraceElement();String tag = generateTag(caller);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (customLogger != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {customLogger.i(tag, content, tr);} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {Log.i(tag, content, tr);}}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">v</span>(String content) {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!allowV)<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;StackTraceElement caller = getCallerStackTraceElement();String tag = generateTag(caller);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (customLogger != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {customLogger.v(tag, content);} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {Log.v(tag, content);}}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">v</span>(String content, Throwable tr) {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!allowV)<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;StackTraceElement caller = getCallerStackTraceElement();String tag = generateTag(caller);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (customLogger != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {customLogger.v(tag, content, tr);} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {Log.v(tag, content, tr);}}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">w</span>(String content) {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!allowW)<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;StackTraceElement caller = getCallerStackTraceElement();String tag = generateTag(caller);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (customLogger != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {customLogger.w(tag, content);} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {Log.w(tag, content);}}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">w</span>(String content, Throwable tr) {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!allowW)<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;StackTraceElement caller = getCallerStackTraceElement();String tag = generateTag(caller);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (customLogger != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {customLogger.w(tag, content, tr);} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {Log.w(tag, content, tr);}}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">w</span>(Throwable tr) {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!allowW)<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;StackTraceElement caller = getCallerStackTraceElement();String tag = generateTag(caller);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (customLogger != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {customLogger.w(tag, tr);} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {Log.w(tag, tr);}}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">wtf</span>(String content) {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!allowWtf)<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;StackTraceElement caller = getCallerStackTraceElement();String tag = generateTag(caller);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (customLogger != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {customLogger.wtf(tag, content);} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {Log.wtf(tag, content);}}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">wtf</span>(String content, Throwable tr) {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!allowWtf)<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;StackTraceElement caller = getCallerStackTraceElement();String tag = generateTag(caller);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (customLogger != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {customLogger.wtf(tag, content, tr);} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {Log.wtf(tag, content, tr);}}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">wtf</span>(Throwable tr) {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!allowWtf)<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;StackTraceElement caller = getCallerStackTraceElement();String tag = generateTag(caller);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (customLogger != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {customLogger.wtf(tag, tr);} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {Log.wtf(tag, tr);}}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> StackTraceElement <span class="hljs-title" style="box-sizing: border-box;">getCallerStackTraceElement</span>() {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> Thread.currentThread().getStackTrace()[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>];}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">point</span>(String path, String tag, String msg) {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (isSDAva()) {Date date = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Date();SimpleDateFormat dateFormat = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> SimpleDateFormat(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span>,Locale.SIMPLIFIED_CHINESE);dateFormat.applyPattern(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"yyyy"</span>);path = path + dateFormat.format(date) + <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/"</span>;dateFormat.applyPattern(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"MM"</span>);path += dateFormat.format(date) + <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/"</span>;dateFormat.applyPattern(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"dd"</span>);path += dateFormat.format(date) + <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">".log"</span>;dateFormat.applyPattern(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"[yyyy-MM-dd HH:mm:ss]"</span>);String time = dateFormat.format(date);File file = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> File(path);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!file.exists())createDipPath(path);BufferedWriter out = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> {out = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> BufferedWriter(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> OutputStreamWriter(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> FileOutputStream(file, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>)));out.write(time + <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">" "</span> + tag + <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">" "</span> + msg + <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\r\n"</span>);} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (Exception e) {e.printStackTrace();} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">finally</span> {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (out != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {out.close();}} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (IOException e) {e.printStackTrace();}}}}<span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*** 根据文件路径 递归创建文件* *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> file*/</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">createDipPath</span>(String file) {String parentFile = file.substring(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, file.lastIndexOf(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/"</span>));File file1 = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> File(file);File parent = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> File(parentFile);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!file1.exists()) {parent.mkdirs();<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> {file1.createNewFile();} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (IOException e) {e.printStackTrace();}}}<span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*** A little trick to reuse a formatter in the same thread*/</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">ReusableFormatter</span> {</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> Formatter formatter;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> StringBuilder builder;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-title" style="box-sizing: border-box;">ReusableFormatter</span>() {builder = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> StringBuilder();formatter = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Formatter(builder);}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> String <span class="hljs-title" style="box-sizing: border-box;">format</span>(String msg, Object... args) {formatter.format(msg, args);String s = builder.toString();builder.setLength(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> s;}}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> ThreadLocal<ReusableFormatter> thread_local_formatter = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> ThreadLocal<ReusableFormatter>() {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">protected</span> ReusableFormatter <span class="hljs-title" style="box-sizing: border-box;">initialValue</span>() {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> ReusableFormatter();}};<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> String <span class="hljs-title" style="box-sizing: border-box;">format</span>(String msg, Object... args) {ReusableFormatter formatter = thread_local_formatter.get();<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> formatter.format(msg, args);}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">boolean</span> <span class="hljs-title" style="box-sizing: border-box;">isSDAva</span>() {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)|| Environment.getExternalStorageDirectory().exists()) {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>;} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>;}}}</code>

Android日志打印类LogUtils,能够定位到类名,方法名以及出现错误的行数并保存日志文件...相关推荐

  1. android webview权限申请_Android应用开发之android 6.0下webview的定位权限设置方法

    本文将带你了解Android应用开发android 6.0下webview的定位权限设置方法,希望本文对大家学Android有所帮助. 如下所示: WebView webView =   (WebVi ...

  2. 日志打印工具类LogUtils

    /** * 日志工具类: * 我们在项目中经常会打印日志,但是在项目上线后日志仍然会打印 * 这样会降低程序运行效率,因此需要在项目上线的时候把日志屏蔽掉 */ public class LogUti ...

  3. c# 日志 打印类

    /// <summary>/// 打印类/// </summary>class TextShowClass{#region 文本框操作#endregionpublic stat ...

  4. 【Android】自定义View和控件时出现Binary XML file line #报错行数: Binary XML file line #9: Error inflating class 类路径

    方法一: 原因:自定义视图.控件的的那个类继承了View或其它布局类的时候没有实现所有的构造方法. 错误写法: 正确写法: 方法二: 原因:参数不匹配 在attrs文件上写的是: <attr n ...

  5. android类名方法名不混淆,android – 如何告诉Proguard混淆类名

    我想用proguard来混淆类名.我在Proguard.cfg中有这一行 -keepclasseswithmembers class * { public static ; } -keepnames ...

  6. tensorflow1.X版本中打印训练好模型各个节点名,并保存在txt,根据输入输出节点保存‘.pb’文件

    tensorflow模型训练好后有几个文件,其中".ckpt"是模型参数数据,".meta"存有网络结构: 如何打印显示网络中各个节点的名称(op),代码如下: ...

  7. Android 日志打印工具类 可显示打印所在的方法和行号

    Android 日志打印工具类 可显示打印所在的方法和行号.便于开发人员查看Log信息~~ package com.newland.util;import java.io.BufferedWriter ...

  8. 解密android日志xlog,安卓开发技巧2:自定义日志工具类XLog的实现

    安卓开发技巧二:自定义日志工具类XLog的实现 我们在开发过程中,打印日志是必不可少的一个调试环节,然而,直接使用系统自带的Log日志类,并不能满足我们实际项目的需求:假如我们现在在开发一款比较大的项 ...

  9. 有关日志打印的几点经验

    前段时间,完善智能导航发送告警短信中短信太长接收不到的bug,牵涉出了日志打印的问题:日志打印这件事说小事小,说大也大,写好日志能方便自己调试代码和发现解决问题,以下就是有关日志打印自己总结的几点经验 ...

最新文章

  1. 苹果将放弃PowerPC支持 全面Intel化
  2. java快递追踪系统_物流跟踪(快递100)
  3. C#获取本机可用端口
  4. 全球仅3000人通过的TensorFlow开发人员认证到底有多香!
  5. html和ascll有什么关联,什么是HTML ASCII(HTML ASCII)?
  6. 一个好的大数据分析软件包含哪些功能
  7. KASLR-内核地址空间布局随机化
  8. 解决IDEA支持GBK编码项目的问题
  9. 【毕业设计】物联网智能温控风扇设计与实现 - stm32 单片机 嵌入式
  10. 基于CameraLink的串行口通讯
  11. 解决笔记本显示器屏幕亮度无法调节情况
  12. 阿里云推送ReactNative简单集成
  13. CSS——run-in元素
  14. 注意力机制最新综述解读
  15. DC算法竞赛——员工离职预测
  16. qq离线linux,QQ For Linux 我哭了,官方版
  17. 《针灸》笔记(倪海厦先生人纪系列针灸篇——综合)
  18. 反向代理和正向代理的区别介绍
  19. 常见的exceptions总结
  20. 2019辽宁公务员考试:逻辑填空词语的“ 合并同类项”

热门文章

  1. C# Dictionary.Add(key,123) 与 Dictionary[key]=123的区别
  2. POJ 3225 Help with Intervals(线段树)
  3. 我的世界服务器称号显示,服务器插件 称号 超级好用
  4. Oracle数据库设计规范
  5. FMDB使用Cached Statement功能
  6. iOS 9应用开发教程之显示编辑文本标签文本框
  7. markdown 图片居中_Markdown常用语法汇总
  8. 浙江python必修课程 2020_智慧职教2020Python程序设计基础章节考试答案
  9. element 修改表单值后表单验证无效_javascript自学记录:表单脚本1
  10. lol12月25服务器维护,lol12月10日维护到几点 英雄联盟12月10日10.25版本更新维护时间...