Android分享之Log工具类
先上代码,需要的直接copy
package com.joey.utilsdemo;
import android.util.Log;
/**
* 日志打印工具类
* 2016/11/03 <br/>
*
* @author Joey Huang QQ:273179370)
*/
public class L {
//默认的TAG,建议后面加下划线
private static final String DEFAULT_TAG = "joey_";
//日志等级(不想打印日志,可设置为 log.ASSERT)
public static int LOG_LEVEL = Log.VERBOSE;
//防止实例
private L() {
throw new UnsupportedOperationException("cannot be instantiated");
}
//生成TAG
public static String createTag(Object o) {
return o == null ? createTag() : DEFAULT_TAG + o.getClass().getSimpleName();
}
//生成默认TAG
public static String createTag() {
return DEFAULT_TAG;
}
public static void v(String msg) {
if (Log.VERBOSE >= LOG_LEVEL)
Log.v(DEFAULT_TAG, msg);
}
public static void d(String msg) {
if (Log.DEBUG>=LOG_LEVEL)
Log.d(DEFAULT_TAG, msg);
}
public static void i(String msg) {
if (Log.INFO>=LOG_LEVEL)
Log.i(DEFAULT_TAG, msg);
}
public static void w(String msg) {
if (Log.WARN>=LOG_LEVEL)
Log.w(DEFAULT_TAG, msg);
}
public static void e(String msg) {
if (Log.ERROR>=LOG_LEVEL) {
e(DEFAULT_TAG, msg);
}
}
public static void v(String tag, String msg) {
if (Log.VERBOSE>=LOG_LEVEL)
Log.v(tag, msg);
}
public static void d(String tag, String msg) {
if (Log.DEBUG>=LOG_LEVEL)
Log.d(tag, msg);
}
public static void i(String tag, String msg) {
if (Log.INFO>=LOG_LEVEL)
Log.i(tag, msg);
}
public static void w(String tag, String msg) {
if (Log.WARN>=LOG_LEVEL)
Log.w(tag, msg);
}
public static void e(String tag, String msg) {
if (Log.ERROR>=LOG_LEVEL) {
StackTraceElement targetStackTraceElement = getTargetStackTraceElement();
Log.e(tag, "(" + targetStackTraceElement.getFileName() + ":" + targetStackTraceElement.getLineNumber() + ")");
Log.e(tag, msg);
}
}
//用于打印可以忽略的信息,比如说被忽视的catch
public static void ignore(String tag, String msg) {
if (Log.VERBOSE>=LOG_LEVEL)
Log.v(tag, "ignore_" + msg);
}
//来自鸿洋大神的手笔
private static StackTraceElement getTargetStackTraceElement() {
// find the target invoked method
StackTraceElement targetStackTrace = null;
boolean shouldTrace = false;
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
for (StackTraceElement stackTraceElement : stackTrace) {
boolean isLogMethod = stackTraceElement.getClassName().equals(L.class.getName())||stackTraceElement.getClassName().startsWith("java.lang");
if (shouldTrace && !isLogMethod) {
targetStackTrace = stackTraceElement;
break;
}
shouldTrace = isLogMethod;
}
return targetStackTrace;
}
}
如何才能摆好姿势
首先 设置TAG 小弟基本每个类都有设置TAG,谁用谁知道。
public class MainActivity extends AppCompatActivity {
private final String TAG = L.createTag(this);
//.......
}
设置打印内容 通常是 方法名:内容
private void method() {
L.v(TAG,"method:"+"我是v");
L.d(TAG,"method:"+"我是d");
L.i(TAG,"method:"+"我是i");
L.w(TAG,"method:"+"我是w");
L.e(TAG,"method:"+"我是e");
L.ignore(TAG,"method:"+"我是ignore");
}
打印结果如下
注:点击图中的绿色MainActivity.java:25,可快速定位到方法位置
心得体会
1.每个类都加一个TAG,这样可以确保快速的找到log日志的位置
2.容易出错的位置建议使用e打印,不仅颜色显眼,而且能够快速的定位log位置
3.不重视的catch也要打印日志,使用ignore打印,方便后续筛选,往往这种地方非常容易出问题
五颜六色的日志,是不是很酷
顺便分享下我的颜色
各日志等级颜色16进制如下:
V使用:#5D8C00
D使用:#5F89B3
IW使用:#BFA160
EA使用:#CC4141