你如果不喜欢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打印。