Android封装对原生Log进行封装的操作
我就废话不多说了,大家还是直接看代码吧~
packagecom.zjx.taobaounion.utils; importandroid.util.Log; publicclassLogUtils{ privatestaticintcurrentLev=4;//当前log等级上线之后控制这个等级就可以减少Log的输出 privatestaticfinalintDEBUG_LEV=4;//debug等级 privatestaticfinalintINFO_LEV=3;//info等级 privatestaticfinalintWARNING_LEV=2;//warning等级 privatestaticfinalintERROR_LEV=1;//error等级 publicstaticvoidd(Classclazz,Stringlog){ if(currentLev>=DEBUG_LEV){ //如果当前设置的等级大于等于debug等级那么就证明当前不屏蔽debug的log输出 Log.d(clazz.getSimpleName(),log); } } publicstaticvoidi(Classclazz,Stringlog){ if(currentLev>=INFO_LEV){ //如果当前设置的等级大于等于info那么就证明当前不屏蔽info的log输出 Log.i(clazz.getSimpleName(),log); } } publicstaticvoidw(Classclazz,Stringlog){ if(currentLev>=WARNING_LEV){ //如果当前设置的等级大于等于warning那么就证明当前不屏蔽warning的log输出 Log.w(clazz.getSimpleName(),log); } } publicstaticvoide(Classclazz,Stringlog){ if(currentLev>=ERROR_LEV){ //如果当前设置的等级大于等于error那么就证明当前不屏蔽error的log输出 Log.e(clazz.getSimpleName(),log); } } }
补充知识:android日志文件LogUtils
背景
这是好久之前在网上找的一个常用类,已经忘记原文链接了,但是觉得很好用一直都在用,可以将日志写到file里面也可以定位你是在哪个类哪一行打印的日志,保存到文件的路径就是android/data/你的包名/files/目录下,然后我们就可以愉快的找问题了
importandroid.text.TextUtils; importandroid.util.Log; importcom.smartlink.suixing.App; importcom.smartlink.suixing.BuildConfig; importjava.io.BufferedWriter; importjava.io.File; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.OutputStreamWriter; importjava.text.SimpleDateFormat; importjava.util.Date; importjava.util.Formatter; importjava.util.Locale; publicclassLogUtils{ publicstaticString customTagPrefix ="log"; //自定义Tag的前缀,可以是作者名 privatestaticfinalboolean isSaveLog =true; //是否把保存日志到SD卡中 privatestaticString cacheDirPath; privateLogUtils(){ } //容许打印日志的类型,默认是true,设置为false则不打印 publicstaticboolean allowD =BuildConfig.DEBUG; publicstaticboolean allowE =BuildConfig.DEBUG; publicstaticboolean allowI =BuildConfig.DEBUG; publicstaticboolean allowV =BuildConfig.DEBUG; publicstaticboolean allowW =BuildConfig.DEBUG; publicstaticboolean allowWtf =BuildConfig.DEBUG; //publicstaticbooleanallowD=true; //publicstaticbooleanallowE=true; //publicstaticbooleanallowI=true; //publicstaticbooleanallowV=true; //publicstaticbooleanallowW=true; //publicstaticbooleanallowWtf=true; privatestaticStringgenerateTag(StackTraceElementcaller){ Stringtag="%s.%s(Line:%d)";//占位符 StringcallerClazzName=caller.getClassName();//获取到类名 callerClazzName=callerClazzName.substring(callerClazzName.lastIndexOf(".")+1); tag=String.format(tag,callerClazzName,caller.getMethodName(),caller.getLineNumber());//替换 tag=TextUtils.isEmpty(customTagPrefix)?tag:customTagPrefix+":"+tag; returntag; } /*** *打印控制台显示不了那么长的日志问题 * *@parammsg */ publicstaticvoidlogE(Stringmsg){//信息太长,分段打印 if(!allowE)return; StackTraceElementcaller=getCallerStackTraceElement(); Stringtag=generateTag(caller); //因为String的length是字符数量不是字节数量所以为了防止中文字符过多, //把4*1024的MAX字节打印长度改为2001字符数 intmax_str_length=2001-tag.length(); //大于4000时 while(msg.length()>max_str_length){ //Log.e(tag,msg.substring(0,max_str_length)); LogUtils.e(msg.substring(0,max_str_length)); msg=msg.substring(max_str_length); } //剩余部分 //Log.e(tag,msg); LogUtils.e(msg); } /** *自定义的logger */ publicstaticCustomLoggercustomLogger; publicinterfaceCustomLogger{ voidd(Stringtag,Stringcontent); voidd(Stringtag,Stringcontent,Throwabletr); voide(Stringtag,Stringcontent); voide(Stringtag,Stringcontent,Throwabletr); voidi(Stringtag,Stringcontent); voidi(Stringtag,Stringcontent,Throwabletr); voidv(Stringtag,Stringcontent); voidv(Stringtag,Stringcontent,Throwabletr); voidw(Stringtag,Stringcontent); voidw(Stringtag,Stringcontent,Throwabletr); voidw(Stringtag,Throwabletr); voidwtf(Stringtag,Stringcontent); voidwtf(Stringtag,Stringcontent,Throwabletr); voidwtf(Stringtag,Throwabletr); } publicstaticvoidd(Stringcontent){ if(!allowD)return; StackTraceElementcaller=getCallerStackTraceElement(); Stringtag=generateTag(caller); if(customLogger!=null){ customLogger.d(tag,content); }else{ Log.d(tag,content); } } publicstaticvoidd(Stringcontent,Throwabletr){ if(!allowD)return; StackTraceElementcaller=getCallerStackTraceElement(); Stringtag=generateTag(caller); if(customLogger!=null){ customLogger.d(tag,content,tr); }else{ Log.d(tag,content,tr); } } publicstaticvoide(Stringcontent){ if(!allowE)return; StackTraceElementcaller=getCallerStackTraceElement(); Stringtag=generateTag(caller); if(customLogger!=null){ customLogger.e(tag,content); }else{ Log.e(tag,content); } if(isSaveLog){ point(cacheDirPath,tag,content); } } publicstaticvoide(Stringcontent,Throwabletr){ if(!allowE)return; StackTraceElementcaller=getCallerStackTraceElement(); Stringtag=generateTag(caller); if(customLogger!=null){ customLogger.e(tag,content,tr); }else{ Log.e(tag,content,tr); } if(isSaveLog){ point(cacheDirPath,tag,tr.getMessage()); } } publicstaticvoide(Throwabletr){ if(!allowE)return; StackTraceElementcaller=getCallerStackTraceElement(); Stringtag=generateTag(caller); if(customLogger!=null){ customLogger.e(tag,"",tr); }else{ Log.e(tag,"",tr); } if(isSaveLog){ point(cacheDirPath,tag,tr.getMessage()); } } publicstaticvoidi(Stringcontent){ if(!allowI)return; StackTraceElementcaller=getCallerStackTraceElement(); Stringtag=generateTag(caller); if(customLogger!=null){ customLogger.i(tag,content); }else{ Log.i(tag,content); } } publicstaticvoidi(Stringcontent,Throwabletr){ if(!allowI)return; StackTraceElementcaller=getCallerStackTraceElement(); Stringtag=generateTag(caller); if(customLogger!=null){ customLogger.i(tag,content,tr); }else{ Log.i(tag,content,tr); } } publicstaticvoidv(Stringcontent){ if(!allowV)return; StackTraceElementcaller=getCallerStackTraceElement(); Stringtag=generateTag(caller); if(customLogger!=null){ customLogger.v(tag,content); }else{ Log.v(tag,content); } } publicstaticvoidv(Stringcontent,Throwabletr){ if(!allowV)return; StackTraceElementcaller=getCallerStackTraceElement(); Stringtag=generateTag(caller); if(customLogger!=null){ customLogger.v(tag,content,tr); }else{ Log.v(tag,content,tr); } } publicstaticvoidw(Stringcontent){ if(!allowW)return; StackTraceElementcaller=getCallerStackTraceElement(); Stringtag=generateTag(caller); if(customLogger!=null){ customLogger.w(tag,content); }else{ Log.w(tag,content); } } publicstaticvoidw(Stringcontent,Throwabletr){ if(!allowW)return; StackTraceElementcaller=getCallerStackTraceElement(); Stringtag=generateTag(caller); if(customLogger!=null){ customLogger.w(tag,content,tr); }else{ Log.w(tag,content,tr); } } publicstaticvoidw(Throwabletr){ if(!allowW)return; StackTraceElementcaller=getCallerStackTraceElement(); Stringtag=generateTag(caller); if(customLogger!=null){ customLogger.w(tag,tr); }else{ Log.w(tag,tr); } } publicstaticvoidwtf(Stringcontent){ if(!allowWtf)return; StackTraceElementcaller=getCallerStackTraceElement(); Stringtag=generateTag(caller); if(customLogger!=null){ customLogger.wtf(tag,content); }else{ Log.wtf(tag,content); } } publicstaticvoidwtf(Stringcontent,Throwabletr){ if(!allowWtf)return; StackTraceElementcaller=getCallerStackTraceElement(); Stringtag=generateTag(caller); if(customLogger!=null){ customLogger.wtf(tag,content,tr); }else{ Log.wtf(tag,content,tr); } } publicstaticvoidwtf(Throwabletr){ if(!allowWtf)return; StackTraceElementcaller=getCallerStackTraceElement(); Stringtag=generateTag(caller); if(customLogger!=null){ customLogger.wtf(tag,tr); }else{ Log.wtf(tag,tr); } } privatestaticStackTraceElementgetCallerStackTraceElement(){ returnThread.currentThread().getStackTrace()[4]; } publicstaticvoidpoint(Stringpath,Stringtag,Stringmsg){ if(isSDAva()){ path=cacheDirPath; Datedate=newDate(); SimpleDateFormatdateFormat=newSimpleDateFormat("",Locale.SIMPLIFIED_CHINESE); dateFormat.applyPattern("yyyy"); path=path+dateFormat.format(date)+"/"; dateFormat.applyPattern("MM"); path+=dateFormat.format(date)+"/"; dateFormat.applyPattern("dd"); path+=dateFormat.format(date)+".log"; dateFormat.applyPattern("[yyyy-MM-ddHH:mm:ss]"); Stringtime=dateFormat.format(date); Filefile=newFile(path); if(!file.exists())createDipPath(path); BufferedWriterout=null; try{ out=newBufferedWriter(newOutputStreamWriter(newFileOutputStream(file,true))); out.write(time+""+tag+""+msg+"\r\n"); }catch(Exceptione){ e.printStackTrace(); }finally{ try{ if(out!=null){ out.close(); } }catch(IOExceptione){ e.printStackTrace(); } } } } /** *根据文件路径递归创建文件 * *@paramfile */ publicstaticvoidcreateDipPath(Stringfile){ StringparentFile=file.substring(0,file.lastIndexOf("/")); Filefile1=newFile(file); Fileparent=newFile(parentFile); if(!file1.exists()){ parent.mkdirs(); try{ file1.createNewFile(); LogUtils.e("日志文件的路径是"+file1.getAbsolutePath()); }catch(IOExceptione){ e.printStackTrace(); } } } /** *Alittletricktoreuseaformatterinthesamethread */ privatestaticclassReusableFormatter{ privateFormatter formatter; privateStringBuilder builder; publicReusableFormatter(){ builder=newStringBuilder(); formatter=newFormatter(builder); } publicStringformat(Stringmsg,Object...args){ formatter.format(msg,args); Strings=builder.toString(); builder.setLength(0); returns; } } privatestaticfinalThreadLocalthread_local_formatter=newThreadLocal (){ protectedReusableFormatterinitialValue(){ returnnewReusableFormatter(); } }; publicstaticStringformat(Stringmsg,Object...args){ ReusableFormatterformatter=thread_local_formatter.get(); returnformatter.format(msg,args); } publicstaticbooleanisSDAva(){ if(cacheDirPath==null)cacheDirPath=App.getAppContext().getExternalFilesDir("log").getAbsolutePath(); if(!TextUtils.isEmpty(cacheDirPath)){ returntrue; }else{ returnfalse; } } }
以上这篇Android封装对原生Log进行封装的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。