我们在开发过程中,打印日志是必不可少的一个调试环节,然而,直接使用系统自带的Log日志类,并不能满足我们实际项目的需求:假如我们现在在开发一款比较大的项目,用到打印日志的地方肯定特别多,等到真正上线的时候,我们是不希望日志依旧能够打印出的,原因很简单,不仅多少有些影响效率,更有可能导致信息的泄露,所以我们就需要把所有的日志打印语句全部取消掉,难道我们真的一个一个的去删除这些打印日志的语句吗?项目那么大,就是想删除,也得耗费大量的时间和精力!大家不用怕,笔者这就给大家带来一款控制线上版本和线下版本的日志打印工具类XLog,通过该工具,我们可以只需要更改一条语句,就能控制日志是否能够打印输出,那么先贴出整个工具类的代码吧:
转载请注明出处:http://blog.csdn.net/u011131296/article/details/41822589
其他开发技巧:
安卓开发技巧一:深入理解Android布局中Layout_weight的属性
安卓开发技巧三:Activity的启动模式
安卓开发技巧四:分享一个工具包,方便快捷切换安卓UI线程及其他后台线程的一个工具包
public final class XLog {
private static boolean logable;
private static int logLevel;
public static enum LogPriority {
VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT
}
/**
* 同Log.v
*
* @param tag
* @param msg
* @return
*/
public static int v(String tag, String msg) {
return println(LogPriority.VERBOSE, tag, msg);
}
/**
* 同Log.d
*
* @param tag
* @param msg
* @return
*/
public static int d(String tag, String msg) {
return println(LogPriority.DEBUG, tag, msg);
}
/**
* 同Log.i
*
* @param tag
* @param msg
* @return
*/
public static int i(String tag, String msg) {
return println(LogPriority.INFO, tag, msg);
}
/**
* 同Log.w
*
* @param tag
* @param msg
* @return
*/
public static int w(String tag, String msg) {
return println(LogPriority.WARN, tag, msg);
}
/**
* 同Log.e
*
* @param tag
* @param msg
* @return
*/
public static int e(String tag, String msg) {
return println(LogPriority.ERROR, tag, msg);
}
/**
* 获取是否可打印日志
*
* @return
*/
public static boolean isLogable() {
return logable;
}
/**
* 设置是否打印日志
*
* @param logable
*/
public static void setLogable(boolean logable) {
XLog.logable = logable;
}
/**
* 设置日志等级
*
* @param level
*/
public static void setLogLevel(LogPriority level) {
XLog.logLevel = level.ordinal();
}
private static int println(LogPriority priority, String tag, String msg) {
int level = priority.ordinal();
if (logable && logLevel <= level) {
return Log.println(level + 2, tag, msg);
} else {
return -1;
}
}
}
接下来,我们来分析一下该工具类的实现原理:
第一步:首先定义一个是否能够打印日志的变量以及打印日志的优先级
第二步:根据优先级实现五个打印日志的静态方法
第三步:设置获取是否可打印日志的方法
第四步:我们只需要在自定义的Application里面设置是否打印就可以了,紧紧只是传一个布尔值。
是不是很简单呢,对于这个日志工具类还有另外一种实现方法,而且比这个还要简单一些,笔者会在接下来的时间将另外一个日志工具类给补上,谢谢!
下面将另外一个日志工具类给补上:
<pre name="code" class="java">public class XLog {
private static final int VERBOSE = 1;
private static final int DEBUG = 2;
private static final int INFO = 3;
private static final int WARN = 4;
private static final int ERROR = 5;
private static final int NOTHING = 6;
private static final int LEVEL = VERBOSE;
public static void v(String tag,String msg){
if(LEVEL <= VERBOSE){
Log.v(tag, msg);
}
}
public static void d(String tag,String msg){
if(LEVEL <= DEBUG){
Log.v(tag, msg);
}
}
public static void i(String tag,String msg){
if(LEVEL <= INFO){
Log.i(tag, msg);
}
}
public static void w(String tag,String msg){
if(LEVEL <= WARN){
Log.w(tag, msg);
}
}
public static void e(String tag,String msg){
if(LEVEL <= ERROR){
Log.e(tag, msg);
}
}
}
这一个日志工具类比较简单,如果我们想要打印VERBOSE级别以上的日志,只需要调用XLog.v("TAG","verbose log"),其他的类似,如果我们不想打印日志,想要隐藏掉所有的日志,就只需要设置LEVEL =NOTHING ,是不是很简单,嘿!