Android LOG标签自定义

你如果不喜欢Android Debugger的LOG标签(打印信息不完整),你可以使用StackTraceElement在你的应用里面实现简单的LOG打印。你不需要使用System.out这个方法在程序中使用,你可以自己写个LOG工具类来完成自己的打印需求。

下面是简单的LogUtils类,提供了一些静态方法,供大家参考。

/**
 * @author wangli Log工具类
 * 
 */
public final class LogUtils {

	private static boolean sIsLogEnabled = true;// 是否打开LOG

	private static String sApplicationTag = "LogDemo";// LOG默认TAG

	private static final String TAG_CONTENT_PRINT = "%s:%s.%s:%d";

	private static StackTraceElement getCurrentStackTraceElement() {
		return Thread.currentThread().getStackTrace()[4];

	}

	//打印LOG
	public static void trace() {
		if (sIsLogEnabled) {
			android.util.Log.d(sApplicationTag,
					getContent(getCurrentStackTraceElement()));
		}
	}

	//获取LOG
	private static String getContent(StackTraceElement trace) {
		return String.format(TAG_CONTENT_PRINT, sApplicationTag,
				trace.getClassName(), trace.getMethodName(),
				trace.getLineNumber());
	}
	//打印默认TAG的LOG
	public static void traceStack() {
		if (sIsLogEnabled) {
			traceStack(sApplicationTag, android.util.Log.ERROR);
		}
	}

	// 打印Log当前调用栈信息
	public static void traceStack(String tag, int priority) {

		if (sIsLogEnabled) {
			StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
			android.util.Log.println(priority, tag, stackTrace[4].toString());
			StringBuilder str = new StringBuilder();
			String prevClass = null;
			for (int i = 5; i < stackTrace.length; i++) {
				String className = stackTrace[i].getFileName();
				int idx = className.indexOf(".java");
				if (idx >= 0) {
					className = className.substring(0, idx);
				}
				if (prevClass == null || !prevClass.equals(className)) {

					str.append(className.substring(0, idx));

				}
				prevClass = className;
				str.append(".").append(stackTrace[i].getMethodName())
						.append(":").append(stackTrace[i].getLineNumber())
						.append("->");
			}
			android.util.Log.println(priority, tag, str.toString());
		}
	}
	//指定TAG和指定内容的方法
	public static void d(String tag, String msg) {
		if (sIsLogEnabled) {
			Log.d(tag, getContent(getCurrentStackTraceElement())+">"+msg);
		}
	}
	//默认TAG和制定内容的方法
	public static void d(String msg) {
		if (sIsLogEnabled) {
			Log.d(sApplicationTag, getContent(getCurrentStackTraceElement())+">"+msg);
		}
	}
	//下面的定义和上面方法相同,可以定义不同等级的Debugger
	public static void i(String tag,String msg){
		
	}
	public static void w(String tag,String msg){
		
	}
	public static void e(String tag,String msg){
		
	}
}
Activity简答的按钮监听事件。

		Button mybutton = (Button) findViewById(R.id.mybutton);
		mybutton.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
			LogUtils.trace();
			LogUtils.d("test", "在这里...");
			}
		});

打印结果

09-10 11:48:56.198: D/test(729): LogDemo:com.test.TestScreenActivity$1.onClick:35>在这里...
09-10 11:48:56.238: D/test(729): LogDemo:com.test.TestScreenActivity$1.onClick:35>在这里...
09-10 11:48:56.198: D/LogDemo(729): LogDemo:com.test.TestScreenActivity$1.onClick:34
09-10 11:48:56.230: D/LogDemo(729): LogDemo:com.test.TestScreenActivity$1.onClick:34
可以从LOG内容看出我们很容易的跟踪代码运行,但是如果你的产品发布,不要忘记了关闭LOG打印。


你可能感兴趣的:(android,String,null,Class,工具,button)