Android自定义Log打印
## 实现超好用的Log打印功能 ##
### 说明:
1.在LogUtlis方法的第一个参数中填this可以输出当前类的名称,特别是在匿名内部类使用也可以输出当前类名.
2.结合logcat的筛选功能,可以实现只看某个级别的log日志.
[ 只想看info级别的日志? 就可以使mDebuggable=3,Log输出控制台调到info级别筛选 ]
### 使用步骤:
1.拷贝LogUtils类到项目中
2.自定义快捷键,如: LogUtils.i(this, "$msg$");
自己定义的快捷键### 代码截图:
类和字段 这是v级别的方法### 全部的代码如下:
public class LogUtils {
/**
* @desc 允许输出log的级别(0代表不输出, 5代表输出所有的日志; 1就是输出v, 2就是输出v和d, 3就是输出v, d, i ...)
*/
private static int mDebuggable = 5;
/**
* 日志输出级别V
*/
public static final int LEVEL_VERBOSE = 1;
/**
* 日志输出级别D
*/
public static final int LEVEL_DEBUG = 2;
/**
* 日志输出级别I
*/
public static final int LEVEL_INFO = 3;
/**
* 日志输出级别W
*/
public static final int LEVEL_WARN = 4;
/**
* 日志输出级别E
*/
public static final int LEVEL_ERROR = 5;
/**---------------日志输出, begin---------------**/
/**
* 以级别为 v 的形式输出LOG
*/
public static void v(Object objTag, String msg) {
if (mDebuggable >= LEVEL_VERBOSE) {
String tag;
// 如果objTag是String,则直接使用;如果objTag不是String,则使用它的类名
if (objTag instanceof String) {
tag = (String) objTag;
} else if (objTag instanceof Class) {
tag = ((Class) objTag).getSimpleName();
} else {
//处理在匿名内部类中写this显示不出类名的问题
tag = objTag.getClass().getName();
String[] split = tag.split("\\.");
tag = split[split.length - 1].split("\\$")[0];
}
if (TextUtils.isEmpty(tag)) {//处理当objTag为null的情况
tag = "该Tag为空";
}
if (TextUtils.isEmpty(msg)) {
Log.v(tag, "该log输出信息为空");
} else {
Log.v(tag, msg);
}
}
}
/**
* 以级别为 d 的形式输出LOG
*/
public static void d(Object objTag, String msg) {
if (mDebuggable >= LEVEL_DEBUG) {
String tag;
// 如果objTag是String,则直接使用;如果objTag不是String,则使用它的类名
if (objTag instanceof String) {
tag = (String) objTag;
} else if (objTag instanceof Class) {
tag = ((Class) objTag).getSimpleName();
} else {
//处理在匿名内部类中写this显示不出类名的问题
tag = objTag.getClass().getName();
String[] split = tag.split("\\.");
tag = split[split.length - 1].split("\\$")[0];
}
if (TextUtils.isEmpty(tag)) {
tag = "该Tag为空";
}
if (TextUtils.isEmpty(msg)) {
Log.d(tag, "该log输出信息为空");
} else {
Log.d(tag, msg);
}
}
}
/**
* 以级别为 i 的形式输出LOG
*/
public static void i(Object objTag, String msg) {
if (mDebuggable >= LEVEL_INFO) {
String tag;
// 如果objTag是String,则直接使用
// 如果objTag不是String,则使用它的类名
if (objTag instanceof String) {
tag = (String) objTag;
} else if (objTag instanceof Class) {
tag = ((Class) objTag).getSimpleName();
} else {
tag = objTag.getClass().getName();
String[] split = tag.split("\\.");
tag = split[split.length - 1].split("\\$")[0];
}
if (TextUtils.isEmpty(tag)) {
tag = "该Tag为空";
}
if (TextUtils.isEmpty(msg)) {
Log.i(tag, "该log输出信息为空");
} else {
Log.i(tag, msg);
}
}
}
/**
* 以级别为 w 的形式输出LOG
*/
public static void w(Object objTag, String msg) {
if (mDebuggable >= LEVEL_WARN) {
String tag;
// 如果objTag是String,则直接使用
// 如果objTag不是String,则使用它的类名
if (objTag instanceof String) {
tag = (String) objTag;
} else if (objTag instanceof Class) {
tag = ((Class) objTag).getSimpleName();
} else {
tag = objTag.getClass().getName();
String[] split = tag.split("\\.");
tag = split[split.length - 1].split("\\$")[0];
}
if (TextUtils.isEmpty(tag)) {
tag = "该Tag为空";
}
if (TextUtils.isEmpty(msg)) {
Log.w(tag, "该log输出信息为空");
} else {
Log.w(tag, msg);
}
}
}
/**
* 以级别为 e 的形式输出LOG
*/
public static void e(Object objTag, String msg) {
if (mDebuggable >= LEVEL_ERROR) {
String tag;
// 如果objTag是String,则直接使用
// 如果objTag不是String,则使用它的类名
if (objTag instanceof String) {
tag = (String) objTag;
} else if (objTag instanceof Class) {
tag = ((Class) objTag).getSimpleName();
} else {
tag = objTag.getClass().getName();
String[] split = tag.split("\\.");
tag = split[split.length - 1].split("\\$")[0];
}
if (TextUtils.isEmpty(tag)) {
tag = "该Tag为空";
}
if (TextUtils.isEmpty(msg)) {
Log.e(tag, "该log输出信息为空");
} else {
Log.e(tag, msg);
}
}
}
/**---------------日志输出, end---------------**/
}