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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。