`
tmdpzc
  • 浏览: 13392 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

可以显示行号的Android Log 工具

阅读更多
Android 的Log 类只能以TAG的方式却分不同类的信息,这里利用反射的方式,将Log所在的行号和类名抓出来,以后转交测试的时候如果看到log的消息就可以快速定位软件的bug
package com.tcl.navigator.utils;

import android.util.Log;

public class LogUtils {
	private static final boolean DEBUG = true;
	private static final String TAG = "LogUtils.java";

	public static void e(String message) {
		if (DEBUG) {
			StackTraceElement[] elements = Thread.currentThread().getStackTrace();
			if (elements.length < 4) {
				Log.e(TAG, "Stack to shallow");
			}else{
				String fullClassName = elements[3].getClassName();
				String className = fullClassName.substring(fullClassName.lastIndexOf(".") + 1);
				String methodName = elements[3].getMethodName();
				int lineNumber = elements[3].getLineNumber();
				Log.e(className + "." + methodName + "():" + lineNumber,message);
			}
		}
	}
	public static void d(String message) {
		if (DEBUG) {
			StackTraceElement[] elements = Thread.currentThread().getStackTrace();
			if (elements.length < 3) {
				Log.e(TAG, "Stack to shallow");
			}else{
				String fullClassName = elements[3].getClassName();
				String className = fullClassName.substring(fullClassName.lastIndexOf(".") + 1);
				String methodName = elements[3].getMethodName();
				int lineNumber = elements[3].getLineNumber();
				Log.d(className + "." + methodName + "():" + lineNumber,message);
			}
		}
	}
	public static void i(String message) {
		if (DEBUG) {
			StackTraceElement[] elements = Thread.currentThread().getStackTrace();
			if (elements.length < 3) {
				Log.e(TAG, "Stack to shallow");
			}else{
				String fullClassName = elements[3].getClassName();
				String className = fullClassName.substring(fullClassName.lastIndexOf(".") + 1);
				String methodName = elements[3].getMethodName();
				int lineNumber = elements[3].getLineNumber();
				Log.i(className + "." + methodName + "():" + lineNumber,message);
			}
		}
	}
	
	public static void w(String message) {
		if (DEBUG) {
			StackTraceElement[] elements = Thread.currentThread().getStackTrace();
			if (elements.length < 3) {
				Log.e(TAG, "Stack to shallow");
			}else{
				String fullClassName = elements[3].getClassName();
				String className = fullClassName.substring(fullClassName.lastIndexOf(".") + 1);
				String methodName = elements[3].getMethodName();
				int lineNumber = elements[3].getLineNumber();
				Log.w(className + "." + methodName + "():" + lineNumber,message);
			}
		}
	}
	public static void v(String message) {
		if (DEBUG) {
			StackTraceElement[] elements = Thread.currentThread().getStackTrace();
			if (elements.length < 3) {
				Log.e(TAG, "Stack to shallow");
			}else{
				String fullClassName = elements[3].getClassName();
				String className = fullClassName.substring(fullClassName.lastIndexOf(".") + 1);
				String methodName = elements[3].getMethodName();
				int lineNumber = elements[3].getLineNumber();
				Log.v(className + "." + methodName + "():" + lineNumber,message);
			}
		}
	}
	
}


分享到:
评论
1 楼 fantouch 2013-03-29  
修改了一下:
package me.fantouch.libs.log;

import android.util.Log;

/**
 * (ExtendedLog=>ELog)可以记录行号,类名,方法名的Log工具
 * 
 * @author Fantouch
 */
public class ELog {
    private static final boolean DEBUG = true;
    private static final String TAG = ELog.class.getSimpleName();

    public static void e(String message) {
        if (DEBUG) {
            Log.e(getTag(Thread.currentThread().getStackTrace()), message);
        }
    }

    public static void d(String message) {
        if (DEBUG) {
            Log.d(getTag(Thread.currentThread().getStackTrace()), message);
        }
    }

    public static void i(String message) {
        if (DEBUG) {
            Log.i(getTag(Thread.currentThread().getStackTrace()), message);
        }
    }

    public static void w(String message) {
        if (DEBUG) {
            Log.w(getTag(Thread.currentThread().getStackTrace()), message);
        }
    }

    public static void v(String message) {
        if (DEBUG) {
            Log.v(getTag(Thread.currentThread().getStackTrace()), message);
        }
    }

    private static String getTag(StackTraceElement[] elements) {
        StringBuffer tag = new StringBuffer();
        if (elements.length < 4) {
            Log.e(TAG, "Stack to shallow");
        } else {
            String fullClassName = elements[3].getClassName();
            tag.append(elements[3].getLineNumber() +
                    fullClassName.substring(fullClassName.lastIndexOf(".") + 1) + "." +
                    elements[3].getMethodName());
        }
        return tag.toString();
    }
}

相关推荐

    Android显示Log信息(带行号)

    Android显示Log信息(带行号),非常好用的Android工具类!

    VC6.0显示行号的工具.rar

    VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号...

    vc6.0显示行号的工具

    vc6.0显示行号的工具vc6.0显示行号的工具vc6.0显示行号的工具vc6.0显示行号的工具vc6.0显示行号的工具

    VC行号显示插件 VC显示行号

    VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC...

    Android代码-一个精简、全面、方便的AndroidLog库–ALog

    兼容 Android Studio 3.1.0 的 Logcat 完美显示日志 兼容 Kotlin 可设置 Log 开启和关闭 可设置是否输出到控制台(Logcat) 可设置 Log 全局 Tag 全局 Tag 为空时 Tag 为当前类名 可设置 Log 是否显示头部信息 Log ...

    c#实现dataGridview前显示行号

    dataGridview控件前面是没有默认的行号的,要实现行号的显示需要自己的对控件进行重绘。本代码实现运用重绘方法使dataGridview显示行号。

    VC6.0显示行号、设置其他字体工具

    vc6.0的字体不好看,而且不能在边缘显示行号,这两个工具可以帮助改变字体和显示行号,显示行号的有注册机且可以汉化。

    vc6.0显示行号的方法

    这里介绍了一种在VC6.0工具上显示行号的方法,引用地址:http://myswirl.blog.163.com/blog/static/5131864220122725535331/

    代码编辑器,显示行号

    是一个js代码编辑器插件,可以设置样式,主题,可显示行号

    VC++6.0显示行号

    VC++6.0显示行号

    vc6.0显示行号

    VC6.0显示行号的插件,很好很强大的显行号插件,使用VC6.0编程的朋友再也不用烦恼没有行号的编程环境了。 VC显示行号插件使用说明: 1. 如果你的VC安装在C盘,请拷贝文件VC6LineNumberAddin.dll到如下目录: C:\...

    vc++行号显示工具

    VC++6.0行号显示插件,调试可以很好定位。

    textarea显示行号

    是一个js插件,可以给textarea的内容显示行号

    vc6显示行号的插件

    vc6显示行号 vc6显示行号 vc6显示行号 vc6显示行号 vc6显示行号

    显示行号(VC6.0)

    VC6.0显示行号!~~~~亲测可用~~VC6.0显示行号!~~~~亲测可用~~VC6.0显示行号!~~~~亲测可用~~

    .xaml设置显示行号

    .xaml设置显示行号

    Word插入代码显示行号并高亮着色显示

    有时候需要编写技术文档,需要在word中插入代码,但直接复制的代码,显示效果可读性非常差,能不能把word上显示的代码弄得给IDE显示的效果一样呢?...设置word显示行号 从IDE中复制带格式的代码内容

    VC6.0显示行号和设置字体的工具

    VC6.0显示行号和设置字体的工具 1. 如果你的VC安装在C盘,请拷贝文件VC6LineNumberAddin.dll到如下目录: C:\Program Files\Microsoft Visual Studio\Common\MSDev98\AddIns 2. 注册 双击VC6LineNumberAddin....

    自定义Android Log打印类

    * 自定义Log打印类 * 在打印给定字符的同时,还打印出所在语句的方法名、行号、类名,甚至详细调用栈等信息 * 可通过DEBUG控制是否打印 * 可通过POSITION控制是否打印所在语句信息

Global site tag (gtag.js) - Google Analytics