`
tmdpzc
  • 浏览: 13791 次
  • 性别: 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工具提供了基本的日志输出功能,包括`Log.v()`(verbose)、`Log.d()`(debug)、`Log.i()`(info)、`Log.w()`(warn)、`Log.e()`(error)等方法,但它们默认并不显示行号。在复杂项目中,...

    Android_Log抓取工具

    其次,"Android_Log抓取工具"可能具有实时监控功能,可以实时显示设备上产生的日志,使得开发者能够即时了解应用运行状态。此外,工具可能还支持过滤特定关键字,帮助开发者专注于与问题相关的日志条目,避免信息...

    非常强大的log日志工具

    在"android log工具包"中,可能提供了自定义标签的功能,使开发者可以为每个模块或函数设置特定的标签,提高日志可读性。 3. **代码行号追踪**: 描述中的"E/PlaceholderFragment.onCreateView(L:44)(19659)"表明...

    android demo,test_function_linenumber_print,android函数名和行号的打印

    要在Android代码中打印函数名和行号,通常可以使用`Log`类的`d()`方法,并结合`new Exception().getStackTrace()[2]`来获取当前调用栈的第二层信息(因为第一层通常是`getStackTrace()`本身)。例如: ```java try ...

    Android代码-KLog

    Android LogCat 工具类,目前功能: 支持显示行号 支持显示Log所在函数名称 支持无Tag快捷打印 支持在Android Studio开发IDE中,点击函数名称,跳转至Log所在位置 支持JSON字符串解析打印 支持XML字符串解析打印 ...

    Android代码-高效率log组件

    这是一个Android 上 效率极高的 Log 工具,主要功能为控制不同级别的Log输出,Log信息保存到文件、打印行号、函数调用、Json解析、点击跳转、多标签Tab 等功能 打印行号、函数调用、Json解析、点击跳转 参照KLog of ...

    Log打印类的封装(android)

    在Android开发中,日志(Log)打印是一个非常重要的工具,它可以帮助开发者追踪代码执行流程、定位和解决问题。本文将详细介绍如何对Android的Log类进行封装,以提供更丰富的调试信息,包括打印出当前类文件的行号...

    android demo,指纹识别和行号日志的打印

    在Android开发中,`Log`类是用于记录应用程序运行时信息的主要工具。默认情况下,`Log`类只打印出消息,但不包括行号,这在调试时可能不够方便。为了打印行号,可以采用以下策略: 1. 使用`Log.d()`、`Log.i()`等...

    Android日志工具类二

    在Android开发中,日志工具类是调试和分析应用程序不可或缺的一部分。本文将深入探讨"Android日志工具类二",重点关注如何通过优化日志输出,提高代码效率和日志的可读性,使开发者能够更好地理解和解决问题。 首先...

    Android Studio使用说明

    Android Studio 提供了 Logcat 工具,能够显示应用程序的日志信息。选择“View”菜单中的“Tool Windows”,然后选择“Logcat”,最后选择合适的日志级别即可。 (3)设置鼠标悬浮提示 Android Studio 提供了鼠标...

    8. Android日志工具类

    在Android Studio中,可以通过设置日志过滤器来控制显示哪些级别的日志,这对于在大量日志中查找特定信息非常有用。 5. **日志的最佳实践** - 使用合适的日志级别:避免在生产环境中打印过多的`VERBOSE`和`DEBUG`...

    查找android crash堆栈中的C++代码位置的工具

    本文将详细介绍如何使用工具在Linux环境下解析Android crash堆栈,从而找到问题的源头。 首先,了解Android crash堆栈的基本结构。它通常包含Java和C++两部分的信息,Java部分可以通过Dalvik VM或ART的堆栈信息识别...

    Android调试

    在Android中,可以使用`Log`类来打印调试信息,通过`Log.d()`、`Log.i()`、`Log.w()`、`Log.e()`等方法分别输出debug、info、warning和error级别的日志。这些信息可以通过Android Studio的Logcat工具或者命令行工具`...

    android下如何调试程序

    Android Studio的Profiler工具提供了CPU、内存、网络和GPU的监控,可以帮助开发者发现性能瓶颈,优化资源使用。 总的来说,Android程序调试涉及多个层面,包括使用IDE内置的调试器、日志系统、远程调试以及性能分析...

    SAF-Kotlin-log.zip

    这个名为"SAF-Kotlin-log.zip"的压缩包很可能包含了一组与使用Kotlin处理Android日志(Log)相关的代码示例或者库。下面我们将深入探讨Android中的日志系统以及如何使用Kotlin优雅地进行日志管理。 Android的日志...

    android-eclipse开发如何debug调试.pdf

    在Android开发过程中,调试是必不可少的一个环节,Eclipse作为经典的集成开发环境,提供了强大的调试工具。本文主要介绍如何使用Eclipse进行Android应用的调试。 首先,添加程序断点是调试的第一步。在Eclipse中,...

    AndroidStudio个人爱好UI设置

    10. **其他个性化设置**:例如,是否显示行号,是否开启代码折叠,编辑器的背景颜色,以及代码高亮等。 在提供的"ASHsettings.jar"文件中,很可能包含了上述提到的一些个人设置。这个文件是Android Studio的配置...

    在eclipse上调试android ndkc程序 教程

    3. **日志输出**:在Android设备上,使用`__android_log_print()`函数可以输出调试信息,这些信息将在Eclipse的Console视图中显示。 **六、其他注意事项** 1. **设备权限**:GDB Server可能需要root权限才能运行,...

Global site tag (gtag.js) - Google Analytics