Android Logging

简介:

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();
        }
  
}
欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 572064792 | Nodejs:329118122 做人要厚道,转载请注明出处!















本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sunshine-anycall/p/3479070.html ,如需转载请自行联系原作者

相关文章
|
9月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1717 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
9月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1105 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
9月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1191 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
10月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
925 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
9月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
426 0
|
10月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
1361 6
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
5625 77
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
706 11
|
12月前
|
移动开发 Java 编译器
Kotlin与Jetpack Compose:Android开发生态的演进与架构思考
本文从资深Android工程师视角深入分析Kotlin与Jetpack Compose在Android系统中的技术定位。Kotlin通过空安全、协程等特性解决了Java在移动开发中的痛点,成为Android官方首选语言。Jetpack Compose则引入声明式UI范式,通过重组机制实现高效UI更新。两者结合不仅提升开发效率,更为跨平台战略和现代架构模式提供技术基础,代表了Android开发生态的根本性演进。
529 0
|
安全 Java Android开发
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
505 0
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡

热门文章

最新文章