带TargetStackTraceElement的log工具类

来源:互联网 发布:java常用算法手册评价 编辑:程序博客网 时间:2024/06/05 16:46

系统的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 {//LogUtilpublic 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