带TargetStackTraceElement的log工具类

博客导航

系统的log日记能看出不少信息,但是系统自带log并不是那么好用。比如说你不调试想关掉调试,你要一条条删除,调试时候log信息在第几行也不好看出。既然如此为什么不自己制作一个能实现自己需要的log系统呢?接下来将要实现的是带TargetStackTraceElement的log工具类,制作自己个性化的log日记系统。

下面是logUtil代码:

 

import android.util.Log;


public class LogUtil {
public static void v(String tag, String msg) {
	if (!Const.isVerbose)
			return;
		StackTraceElement targetStackTraceElement = getTargetStackTraceElement();
		Log.v(tag, getTAG(targetStackTraceElement));
		Log.v(tag, msg);


	}


	public static void v(String tag, String msg, Throwable tr) {
		if (!Const.isVerbose)
			return;
		StackTraceElement targetStackTraceElement = getTargetStackTraceElement();
		Log.v(tag, getTAG(targetStackTraceElement));
		Log.v(tag, msg, tr);


	}


	public static void d(String tag, String msg) {
		if (!Const.isDebug)
			return;
		StackTraceElement targetStackTraceElement = getTargetStackTraceElement();
		Log.d(tag, getTAG(targetStackTraceElement));
		Log.d(tag, msg);


	}


	public static void d(String tag, String msg, Throwable tr) {
		if (!Const.isDebug)
			return;
		StackTraceElement targetStackTraceElement = getTargetStackTraceElement();
		Log.d(tag, getTAG(targetStackTraceElement));
		Log.d(tag, msg, tr);


	}


	public static void i(String tag, String msg) {
		if (!Const.isInformation)
			return;
		StackTraceElement targetStackTraceElement = getTargetStackTraceElement();
		Log.i(tag, getTAG(targetStackTraceElement));
		Log.i(tag, msg);


	}


	public static void i(String tag, String msg, Throwable tr) {
		if (!Const.isInformation)
			return;
		StackTraceElement targetStackTraceElement = getTargetStackTraceElement();
		Log.i(tag, getTAG(targetStackTraceElement));
		Log.i(tag, msg, tr);


	}


	public static void w(String tag, String msg) {
		if (!Const.isWarning)
			return;
		StackTraceElement targetStackTraceElement = getTargetStackTraceElement();
		Log.w(tag, getTAG(targetStackTraceElement));
		Log.w(tag, msg);


	}


	public static void w(String tag, String msg, Throwable tr) {
		if (!Const.isWarning)
			return;
		StackTraceElement targetStackTraceElement = getTargetStackTraceElement();
		Log.w(tag, getTAG(targetStackTraceElement));
		Log.w(tag, msg, tr);


	}


	public static void e(String tag, String msg) {
		if (!Const.isError)
			return;
		StackTraceElement targetStackTraceElement = getTargetStackTraceElement();
		Log.e(tag, getTAG(targetStackTraceElement));
		Log.e(tag, msg);


	}


	public static void e(String tag, String msg, Throwable tr) {
		if (!Const.isError)
			return;


		StackTraceElement targetStackTraceElement = getTargetStackTraceElement();
		Log.e(tag, getTAG(targetStackTraceElement));
		Log.e(tag, msg, tr);


	}


	private static String getTAG(StackTraceElement targetStackTraceElement) {
		return targetStackTraceElement.getClassName() + "." + targetStackTraceElement.getMethodName() + "("
				+ targetStackTraceElement.getFileName() + ":" + targetStackTraceElement.getLineNumber() + ")";
	}


	private static StackTraceElement getTargetStackTraceElement() {
		StackTraceElement targetStackTrace = null;
		boolean shouldTrace = false;
		StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
		for (StackTraceElement stackTraceElement : stackTrace) {
			boolean isLogMethod = stackTraceElement.getClassName().equals(LogUtil.class.getName());
			if (shouldTrace && !isLogMethod) {
				targetStackTrace = stackTraceElement;
				break;
			}
			shouldTrace = isLogMethod;
		}
		return targetStackTrace;
	}
}


这里面的TargetStackTraceElement是要实现显示代码行,包名字,文件名等。在另外一个Const类里面实现开关调试功能。

 

 

public class Const {

	//LogUtil
	public static boolean isDebug = true; //Debug调试
	public static boolean isVerbose = true; //任何消息
	public static boolean isInformation = true; //提示性的消息
	public static boolean isWarning = true; //警告信息
	public static boolean isError = true; //错误信息
}

 

 代码调用:

 

 

LogUtil.d("info", "1234567");

 

显示效果如下:

 

info   com.example.Reader.Date(Reader.java:207)
info   1234567

当然了,如果你对这个显示效果不满意,也可以根据自己需要改写。
 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值