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. PyQt 5菜单和工具栏

    QMainWindow类提供主要应用程序的窗口,有添加状态栏.工具栏.菜单栏等功能 状态栏 self.statusBar().showMessage('Ready') # 创建一个状态栏 # 状态栏显 ...

  2. 编译hostapd时,出现错误:/usr/bin/ld: cannot find -lnl

    book@ubuntu:/work/project/wifi/04.hostapd/hostapd-2.0/hostapd$ make /usr/bin/ld: cannot find -lnl co ...

  3. php502故障处理

    一次打开网站,发现502,第一反应肯定是php-fpm没启动,尝试启动还是502. 1.首先查询Nginx日志发现如下连接PHP失败: 2016/07/29 15:56:04 [error] 2376 ...

  4. 一行命令解决 xcode升级新版本插件失效问题

    sudo find ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -name Info.plist -maxdepth ...

  5. ztree--插件实现增删改查demo(完整版)

    ztree--插件实现增删改查demo(完整版) var setting = {                 async: {                     enable: true,  ...

  6. 使用C#书写SQLite数据库增删改查语句(以及插入byte[]时遇到的问题总结)

    在没有使用SQLite这种轻量级的数据库之前,只使用过Sqlserver2008进行数据的增删改查,公司使用的是大型的ORACLE数据库,还没有真正的会使用它.那时候觉得数据库很庞大,然而遇到SQLi ...

  7. IOS Background 之 Background Fetch

    http://www.ithao123.cn/content-1363653.html 定期更新数据的app,比如及时通信类,微博等app. 定期后台获取,等打开后获取的快一些. 30分钟后打开手,获 ...

  8. c++builder 读写文件类

    c++builder 读写文件类 TStreamReader.TStreamWriter读取一行 http://docwiki.embarcadero.com/CodeExamples/XE8/en/ ...

  9. 获取用户的相关请求信息, 以及包括请求头 request.environ

    #在index文件中 1. print(type(request)) #看出所属库 2. from django.core.handlers.wsgi import WSGIRequest #查看WS ...

  10. Bootstrip 的select的数据绑定问题

    这个问题浪费了我整整一个下午时间 最后终于解决了  这里来备份一下 $(function(){ var stu_no = freeUrl(); var data, subname="&quo ...