关闭

带TargetStackTraceElement的log工具类

标签: AndroidTargetStackTraceElemlog日记log工具类
171人阅读 评论(0) 收藏 举报
分类:

系统的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
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Android技巧之封装Log工具类

1.前言开发过程中打日志已成为我们平时Debug调试不可缺少的一部分,Android SDK给我们也提供了很不错的工具类,并且分了不同的日志级别:Log.v() Log.d() Log.i() Log...
  • jdsjlzx
  • jdsjlzx
  • 2016-05-25 17:36
  • 6369

简易Java日志(Log)输出工具的封装

平时 Java 项目的开发通常需要统一管理日志(Log)的输出,例如控制日志信息输送的目的地(控制台、文件等),控制每一条日志的输出格式,把日志分为不同的级别等。常用的比较成熟的 Java 日志管理工...
  • xietansheng
  • xietansheng
  • 2017-04-22 23:22
  • 2441

android中超实用自定义log日志输出工具类

1 在LogUtlisl方法的第一个参数中填this可以输出当前类的名称,特别是在匿名内部类使用也可以输出当前类名。 如 : LogUtils.i(this,"这是一个实用的日志工具类") 或 Lo...
  • u012993796
  • u012993796
  • 2017-01-17 11:19
  • 768

Android快速开发系列 10个常用工具类

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38965311,本文出自【张鸿洋的博客】打开大家手上的项目,基本都会有一大批的辅助...
  • lmj623565791
  • lmj623565791
  • 2014-09-05 09:27
  • 131923

Log安卓开发中常用的优秀日志工具

(本人使用的是android studio 所以各种讲解都会以android studio工具为主),如有转载请附带小白原创地址,珍惜别人劳动,提升自己技术,一起努力! 一、Log的介绍 ...
  • bobo8945510
  • bobo8945510
  • 2016-07-01 13:44
  • 4373

android开发之自定义log工具

android开发之自定义log工具 log日志输出在实际开发的过程中,使用频率是非常高的,每天都在用,那么问题容易出在哪个环节?体现在控制!因为log输出的往往都是项目的核心数据,也就是业务数据...
  • everconfig
  • everconfig
  • 2015-05-11 22:00
  • 1432

【强烈推荐】C#工具类MSCL系列(十)Log日志帮助类...更多请点击右侧购买

using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Ref...
  • smartsmile2012
  • smartsmile2012
  • 2017-01-06 09:28
  • 985

Logger-功能强大使用方便的Log日志打印工具类

介绍Android开发中Log日志打印对开发者来说是非常重要的功能。但是感觉Log写多了也是烦,每次都需要设置一个TAG过滤值和具体的打印信息,而且打印的信息也不够丰富。 这里我推荐一个功能强大的L...
  • Card361401376
  • Card361401376
  • 2016-05-17 19:41
  • 3090

Java MailUtils邮件发送工具类 支持附件

Java MailUtils邮件发送工具类 支持附件JavaMail Demo,引用的jar如下: - activation.jar - mail.jarsmtp设置参考https://www.w...
  • u010826617
  • u010826617
  • 2017-06-22 11:21
  • 525

Android开发之封装log打印日志的工具类,实用logutils详细代码

public final class LogUtil { /** all Log print on-off */ private final static boolean all = true; ...
  • qq_21376985
  • qq_21376985
  • 2016-04-01 14:41
  • 1423
    个人资料
    • 访问:36892次
    • 积分:683
    • 等级:
    • 排名:千里之外
    • 原创:31篇
    • 转载:1篇
    • 译文:0篇
    • 评论:6条
    最新评论