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. 【游记】noip2017酱油记

    2017-10-14:初赛 12:00:比赛时间14:30-16:30,由于比赛地点在二附中,我12点就坐上了地铁(无力吐槽,周六中午人还那么多,站了一路). 13:45:到了efz,所有人都被拦在了 ...

  2. ODPS基础

    遇到一个项目需求是统计128张分库分表的数据表记录的最大id,通过单表查询计算非常费时,也无法应对分表数更多的情况,因此考虑到通过odps进行任务发布和运算 在云端 http://d2.alibaba ...

  3. WebService与WCF

    5.Web Service和WCF的到底有什么区别 https://zhidao.baidu.com/question/1368120490988718179.html 6.VS 2010中使用C#创 ...

  4. gif屏幕录像软件

    ScreenToGif:http://screentogif.codeplex.com       备份下载地址:http://flask.pub/screentogif2.zip 本站连接:http ...

  5. python中django的第一课

    今天找遍了,PYTHON项目中的文件,也没发现后台管理的这些页面去哪里修改 原来在pycharm中的外部库中,查找django,最终找到 $python\django\django\contrib\a ...

  6. npm上传包

    npm上传包 向npm上传一个包是很容易的,只需要三步: 1.在npm官网注册一个账户,然后在cmd中登录账户 注:npm不要使用代理,直接连接 https://registry.npms.org/. ...

  7. clipboard使用总结

    官方网站:https://clipboardjs.com/ 使用总结:http://blog.csdn.net/hry2015/article/details/70941912

  8. Hexo+Github/Coding免费搭建个人博客网站

    体验更优排版请移步原文:http://blog.kwin.wang/other/hexo-github-build-blog.html 很早之前就想搭建一个属于自己的博客网站,一方面是给自己做笔记,把 ...

  9. django使用mysql

    django使用mysql需要注意在project目录下的__init__.py 中添加:import pymysql pymysql.install_as_MySQLdb()

  10. IDEA2018.2版本注册

    IntelliJ IDEA 2018.2版本注册 1.到官网下载IDEA安装文件,windows版本ideaIU-2018.2.2.exe,然后安装: 2.下载补丁包JetbrainsCrack-3. ...