http://blog.youkuaiyun.com/lonely_fireworks/article/details/7962657
你如果不喜欢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){
- }
- }
- 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