Log信息获取调用类和调用方法名的实现原理
2012-04-27 12:28
531 查看
Log信息获取调用类和调用方法名的实现原理 - buaawhl - ITeye技术网站
Log信息获取调用类和调用方法名的实现原理
博客分类:my blog
log4jJavaApacheJDKSUN恰好看到关于log的讨论。想起以前调查的一个问题。整理出来,希望对大家能有所帮助。
Sun JDK 源代码下载 http://wwws.sun.com/software/communitysource/
先注册并登录到“Sun Community Source Licensing”,然后下载J2SE(几十兆)或者J2EE(几百兆)。
Log能够把代码运行时间,类名,方法名,还有信息,全部都打印出来。
一个直观的例子,每次启动Tomcat(缺省配置)的时候。一般可以看到
Jul 9, 2004 11:22:29 AM org.apache.struts.util.PropertyMessageResources <init>
INFO: Initializing, config='org.apache.webapp.admin.ApplicationResources', returnNull=true
Jul 9, 2004 11:22:41 AM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on port 8080
时间,类名,方法名,信息都打印了出来。
那么,log是如何获取调用自身的这个类和这个方法名的呢?
后面给出的代码是JDK1.4的源代码,和Log4J的源代码。说明其实现原理。
获得调用类,和方法名,就是需要获得当前运行栈的结构。
new Throwable().getStackTrace() 会返回当前运行栈的结构层次。
利用这种原理,可以获得整个运行栈的调用关系。
JDK1.4的java.util.logging包, 通过Throwable.getStackTrace()方法实现的。
// Get the stack trace.
StackTraceElement stack[] = (new Throwable()).getStackTrace();
完整的代码在JDK1.4的源代码里面,java.util.logging.LogRecord类的inferCaller方法。
Java代码
Log信息获取调用类和调用方法名的实现原理
博客分类:my bloglog4jJavaApacheJDKSUN恰好看到关于log的讨论。想起以前调查的一个问题。整理出来,希望对大家能有所帮助。
Sun JDK 源代码下载 http://wwws.sun.com/software/communitysource/
先注册并登录到“Sun Community Source Licensing”,然后下载J2SE(几十兆)或者J2EE(几百兆)。
Log能够把代码运行时间,类名,方法名,还有信息,全部都打印出来。
一个直观的例子,每次启动Tomcat(缺省配置)的时候。一般可以看到
Jul 9, 2004 11:22:29 AM org.apache.struts.util.PropertyMessageResources <init>
INFO: Initializing, config='org.apache.webapp.admin.ApplicationResources', returnNull=true
Jul 9, 2004 11:22:41 AM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on port 8080
时间,类名,方法名,信息都打印了出来。
那么,log是如何获取调用自身的这个类和这个方法名的呢?
后面给出的代码是JDK1.4的源代码,和Log4J的源代码。说明其实现原理。
获得调用类,和方法名,就是需要获得当前运行栈的结构。
new Throwable().getStackTrace() 会返回当前运行栈的结构层次。
利用这种原理,可以获得整个运行栈的调用关系。
JDK1.4的java.util.logging包, 通过Throwable.getStackTrace()方法实现的。
// Get the stack trace.
StackTraceElement stack[] = (new Throwable()).getStackTrace();
完整的代码在JDK1.4的源代码里面,java.util.logging.LogRecord类的inferCaller方法。
Java代码
相关文章推荐
- Log信息获取调用类和调用方法名的实现原理
- Log信息获取调用类和调用方法名的实现原理
- log信息获取调用类名和调用方法名的实现原理
- 使用ShellClass获取文件属性详细信息的实现方法
- Spring源码学习之:@async 方法上添加该注解实现异步调用的原理
- 代码实现获取log日志和logcat使用方法
- dedecms实现任意页面调用当前会员信息的方法
- Android实现获取SERIAL信息的方法
- java 获取当前方法的被调用信息(被那个方法那个类那一行调用)
- android 调用系统方法获取应用程序信息 如缓存大小
- Android 调用系统相机拍摄获取照片的两种方法实现实例
- Atitit.编程语言原理---方法重载的实现与设计 调用方法的原理
- java 获取调用类的 类名 方法名等信息
- 获取ServerSocket信息的方法及FTP原理
- Atitit.编程语言原理---方法重载的实现与设计 调用方法的原理
- 项目实战:几十行代码实现更加强大的Log,全方位输出类-方法-行数-信息
- 以下是根据RemObject的远程方法调用原理实现的简单远程方法
- php调用第三方插件ffmpeg获取上传视频信息方法
- 关于JVM中方法调用的相关指令,以及解析(Resolution)和分派(Dispatch)的解释——重载的实现原理与重写的实现原理
- Spring源码学习之:@Async 方法上添加该注解实现异步调用的原理