Here is HauteLook’s logger class from our Android Code Library. It displays class name, method name and line number per line of log message.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
package com.hautelook.android.lib.logger;
  
/**
 * @authorjimmy@hautelook.com
 * @copyright 2011 HauteLook
 *
 * Description:
 *   Simple logger that displays: class name, method name and line number
 *
 *
 * Usage:
 
 *   Use this class directly or customize it by extending it.
 
 *      HLlog.i("");
 *      HLLog.i("called");
 *      HLLog.i("called","tag");
 *  
 *      L.i();
 *      L.i("called");
 *      L.i("called","tag");
 *
 * Sub-classing example:
 *
 *    // C.DEBUG = boolean true/false (project specific constant class)
 *
 *    public class L extends HLLog {
 *    
 *           public static String DEFAULT_TAG = "HauteLook";
 *    
 *           public static void i() {
 *                if(C.DEBUG) callLogger("i", DEFAULT_TAG, "");
 *           }
 *    
 *           public static void i(String message) {
 *                  if(C.DEBUG) callLogger("i", DEFAULT_TAG, message);
 *           }
 *
 *           public static void i(String message, String tag) {
 *                  if(C.DEBUG) callLogger("i", tag, message);
 *           }
 *
 *    }
 
 */
  
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import android.util.Log;
  
@SuppressWarnings("unused")
publicclass HLLog {
  
       publicstatic String DEFAULT_TAG ="HauteLookLib";
  
       finalstaticintdepth = 4;
  
       publicstaticvoid i(String message) {
              callLogger("i", DEFAULT_TAG, message);
       }
  
       publicstaticvoid i(String message, String tag) {
              callLogger("i", tag, message);
       }
  
       publicstaticvoid d(String message) {
              callLogger("d", DEFAULT_TAG, message);
       }
  
       publicstaticvoid d(String message, String tag) {
              callLogger("d", tag, message);
       }
  
       publicstaticvoid e(String message) {
              callLogger("e", DEFAULT_TAG, message);
       }
  
       publicstaticvoid e(String message, String tag) {
              callLogger("e", tag, message);
       }
  
       publicstaticvoid w(String message) {
              callLogger("w", DEFAULT_TAG, message);
       }
  
       publicstaticvoid w(String message, String tag) {
              callLogger("w", tag, message);
       }
  
       publicstaticvoid v(String message) {
              callLogger("v", DEFAULT_TAG, message);
       }
  
       publicstaticvoid v(String message, String tag) {
              callLogger("v", tag, message);
       }
  
       @SuppressWarnings("rawtypes")
       publicstaticvoid callLogger(String methodName, String tag, String message) {
              final StackTraceElement[] ste = Thread.currentThread().getStackTrace();
              try {
                     Class cls = Class.forName("android.util.Log");
                     Method method = cls.getMethod(methodName, String.class,       String.class);
                     method.invoke(null, tag, getTrace(ste) + message);
              } catch (ClassNotFoundException e) {
                     e.printStackTrace();
              } catch (IllegalArgumentException e) {
                     e.printStackTrace();
              } catch (SecurityException e) {
                     e.printStackTrace();
              } catch (IllegalAccessException e) {
                     e.printStackTrace();
              } catch (InvocationTargetException e) {
                     e.printStackTrace();
              } catch (NoSuchMethodException e) {
                     e.printStackTrace();
              }
       }
  
       publicstatic String getTrace(StackTraceElement[] ste) {
              return"[" + getClassName(ste) + "][" + getMethodName(ste) + "][" + getLineNumber(ste) + "] ";
       }
  
       publicstatic String getClassPackage(StackTraceElement[] ste) {
              return ste[depth].getClassName();
       }
  
       publicstatic String getClassName(StackTraceElement[] ste) {
              String[] temp = ste[depth].getClassName().split("\\.");
              return temp[temp.length - 1];
       }
  
       publicstatic String getMethodName(StackTraceElement[] ste) {
              return ste[depth].getMethodName();
       }
  
       publicstaticint getLineNumber(StackTraceElement[] ste) {
              return ste[depth].getLineNumber();
       }
  
}

Android Logging的更多相关文章

  1. Android Native 代码NDK开发学习笔记

    引用:http://www.kunli.info/2011/08/21/android-native-code-study-note/ JNI,全称Java Native Interface,是用于让 ...

  2. Android Debugging

    Debugging methods for Android Contents [hide]  1 Debuggers 1.1 Kernel and User co-debug with GDB on ...

  3. 【转】Android使用Log4j例子

    Step 1 Download Log4J library from http://logging.apache.org/log4j/1.2/download.html Step 2 Configur ...

  4. 6、android 普通日志输出到SD卡

    这是本人见过写博文最负责的一个人: http://www.crifan.com/android_try_use_android_logging_log4j_to_output_log_to_sd_ca ...

  5. Android中使用logwrapper来重定向应用程序的标准输出

    在Android应用程序调试中,有时候第三方应用程序的日志输出是通过printf之类的标准函数输出的,logcat不能捕获这些日志,一个方法是使用logwrapper命令来执行第三方应用程序,logw ...

  6. android从应用到驱动之—camera(2)---cameraHAL的实现

    本文是camera系列博客,上一篇是: android从应用到驱动之-camera(1)---程序调用流程 本来想用这一篇博客把cameraHAL的实现和流程都给写完的.搞了半天,东西实在是太多了.这 ...

  7. android从应用到驱动之—camera(2)---cameraHAL的实现

    本来想用这一篇博客把cameraHAL的实现和流程都给写完的.搞了半天,东西实在是太多了.这篇先写cameraHAL的基本实现框架,下一篇在具体写camerahal的流程吧. cameraHAL的实现 ...

  8. android开发教程(八)——环境搭建之java-ndk

    目录 android ndk是android用于开发本地代码的开发工具包.它提供C/C++交叉编译工具.android内核.驱动.已有的C/C++代码,都需要ndk来支持开发. 目前支持以下平台:ar ...

  9. Android 启动过程总结

    SystemServer的启动 frameworks/base/services/java/com/android/server/SystemServer.java: run() 其中调用Activi ...

随机推荐

  1. ALSA声卡16_编写ALSA声卡应用程序_学习笔记

    1.体验 (1)ALSA声卡使用体验:使用arecord录音,使用aplay播放,在Alsa-utils里面) 准备: cd linux-3.4.2 patch -p1 < ../linux-3 ...

  2. 安装FFmpeg3.0.9

    //静态版的 FFmpeg Static Builds   release: 3.3.3 https://www.johnvansickle.com/ffmpeg/ ffmpeg-release-64 ...

  3. sublime text安装插件

    http://www.sublimetext.com/ 安装Sublime Text 2插件的方法: 1.直接安装 安装Sublime text 2插件很方便,可以直接下载安装包解压缩到Package ...

  4. 25_java之Properities集合|对象序列化和反序列化

    01Properties集合的特点 * A: Properties集合的特点 * a: Properties类介绍 * Properties 类表示了一个持久的属性集.Properties 可保存在流 ...

  5. REST 规范

    DRF之REST规范介绍及View请求流程分析 DRF之解析器组件及序列化组件 DRF - 序列化组件(GET/PUT/DELETE接口设计).视图优化组件 DRF之权限认证频率组件 DRF之注册器响 ...

  6. 接触C# 反射

    1.反射的概念详解[1] 1.1 理解C#中的反射 1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的生理情况.这是如何做到的呢?B超是B型超声波,它可以透过肚皮通过向你体内 发 ...

  7. halcon 如何把一个region截取出来保存为图像

    read_image(Image,'monkey') gen_circle(region,200,200,150) reduce_domain(Image,region,Mask) crop_doma ...

  8. 9.redis安全

    转自:http://www.runoob.com/redis/redis-tutorial.html Redis 安全 我们可以通过 redis 的配置文件设置密码参数,这样客户端连接到 redis ...

  9. 数字1的ASCII值是多少

    ASCII表是计算机将字符转为数字存储的一张转换表.因此,只有字符才有ASCII值,数字是没有的. 答案:数字1没有ASCII值,数字1在计算机中就是按数值1存储的. 字符1的ASCII值是 49

  10. JAVA heap space 内存溢出

    3月28日开始使用JAVA调用SAP RFC后提示内存溢出 尝试增加set java_OPTS.....但仍然提示内存溢出 最终设置方法