- 浏览: 526292 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (740)
- css (4)
- jquery (8)
- javascript (23)
- html (0)
- uml (0)
- 设计模式 (1)
- 开发工具 (14)
- json (4)
- struts 1.x (3)
- spring (3)
- hibernate (6)
- struts 2.x (17)
- JFreechart (0)
- j2se (48)
- jsp (9)
- flex (22)
- 找工作 (1)
- 技术杂谈 (18)
- 网络编程 (5)
- io流 (1)
- ORACLE (15)
- 报表 (3)
- extjs (11)
- jpbm (2)
- swing (5)
- jspereports (3)
- sql (1)
- linux (15)
- ps (1)
- storm (4)
- hbase (8)
- li (0)
- python (1)
- hive (3)
- 机器学习 (1)
- hdfs (1)
- elasticsearch (1)
- hadoop 2.2 (5)
- hadoop (1)
最新评论
-
Tristan_S:
这个有点意思
ASM -
starryskydog:
程序修改detail band部分的样式 如内容字体大小 ...
使用jasperReport实现动态表头 -
samwong:
Good, so usefule
使用YUI Compressor压缩CSS/JS -
gc715409742:
能够告诉我怎么在web项目中使用YUI Compressor? ...
使用YUI Compressor压缩CSS/JS -
JsonTeye:
您好! 我看你的代码,我现在也在做动态报表,实现功能由用户自己 ...
使用jasperreport动态生成pdf,excel,html
log4jjava
今天看log4j的日志,突然注意到log4j 可以打印行号.
行号之类的信息一般调试的时候会用到,java API 猜测应该不会封装调试器API出来(不清楚调试器的实现)
后来想到了异常堆栈的时候是可以打印行号的,所以是不是可以通过异常获取行号呢?
查看API
Java代码 收藏代码
StackTraceElement[] java.lang.Throwable.getStackTrace() //堆栈元素
int java.lang.StackTraceElement.getLineNumber() //行号
String java.lang.StackTraceElement.getMethodName() //方法名
而且可以 根据异常堆栈可以找到方法的调用链。
顺便研究一下 log4j 的源码(1.2.16),也是同样的方法实现的:
new Throwable() 然后根据该 Throwable 获取堆栈信息
Java代码 收藏代码
public LocationInfo getLocationInformation() {
if(locationInfo == null) {
locationInfo = new LocationInfo(new Throwable(), fqnOfCategoryClass);
//org.apache.log4j.spi.LoggingEvent 253 行
}
return locationInfo;
}
Java代码 收藏代码
//org.apache.log4j.spi.LocationInfo 138 行
public LocationInfo(Throwable t, String fqnOfCallingClass) {
Object[] noArgs = null;
Object[] elements = (Object[]) getStackTraceMethod.invoke(t, noArgs);
String prevClass = NA;
for(int i = elements.length - 1; i >= 0; i--) {
String thisClass = (String) getClassNameMethod.invoke(elements[i], noArgs);
if(fqnOfCallingClass.equals(thisClass)) {
int caller = i + 1;
if (caller < elements.length) {
className = prevClass;
methodName = (String) getMethodNameMethod.invoke(elements[caller], noArgs);
fileName = (String) getFileNameMethod.invoke(elements[caller], noArgs);
if (fileName == null) {
fileName = NA;
}
int line = ((Integer) getLineNumberMethod.invoke(elements[caller], noArgs)).intValue();
if (line < 0) {
lineNumber = NA;
} else {
lineNumber = String.valueOf(line);
}
StringBuffer buf = new StringBuffer();
buf.append(className);
buf.append(".");
buf.append(methodName);
buf.append("(");
buf.append(fileName);
buf.append(":");
buf.append(lineNumber);
buf.append(")");
this.fullInfo = buf.toString();
}
return;
}
prevClass = thisClass;
}
return;
//其他代码
不清楚调试器是怎么实现的.
重新看了一下JDK 发现其实可以从当前线程里面拿到堆栈信息的
Java代码 收藏代码
StackTraceElement[] stes = Thread.currentThread().getStackTrace();
另外还有一个关于线程信息的类 【 java.lang.management.ThreadInfo 】
Java代码 收藏代码
ThreadInfo ThreadMXBean.getThreadInfo(long);
//获取不带堆栈信息的 ThreadInfo
ThreadInfo[] ThreadMXBean.dumpAllThreads(boolean, boolean);
//获取所有线程的 ThreadInfo 并带有堆栈信息
转载请保留地址:http://lchshu001.iteye.com/blog/1472583
今天看log4j的日志,突然注意到log4j 可以打印行号.
行号之类的信息一般调试的时候会用到,java API 猜测应该不会封装调试器API出来(不清楚调试器的实现)
后来想到了异常堆栈的时候是可以打印行号的,所以是不是可以通过异常获取行号呢?
查看API
Java代码 收藏代码
StackTraceElement[] java.lang.Throwable.getStackTrace() //堆栈元素
int java.lang.StackTraceElement.getLineNumber() //行号
String java.lang.StackTraceElement.getMethodName() //方法名
而且可以 根据异常堆栈可以找到方法的调用链。
顺便研究一下 log4j 的源码(1.2.16),也是同样的方法实现的:
new Throwable() 然后根据该 Throwable 获取堆栈信息
Java代码 收藏代码
public LocationInfo getLocationInformation() {
if(locationInfo == null) {
locationInfo = new LocationInfo(new Throwable(), fqnOfCategoryClass);
//org.apache.log4j.spi.LoggingEvent 253 行
}
return locationInfo;
}
Java代码 收藏代码
//org.apache.log4j.spi.LocationInfo 138 行
public LocationInfo(Throwable t, String fqnOfCallingClass) {
Object[] noArgs = null;
Object[] elements = (Object[]) getStackTraceMethod.invoke(t, noArgs);
String prevClass = NA;
for(int i = elements.length - 1; i >= 0; i--) {
String thisClass = (String) getClassNameMethod.invoke(elements[i], noArgs);
if(fqnOfCallingClass.equals(thisClass)) {
int caller = i + 1;
if (caller < elements.length) {
className = prevClass;
methodName = (String) getMethodNameMethod.invoke(elements[caller], noArgs);
fileName = (String) getFileNameMethod.invoke(elements[caller], noArgs);
if (fileName == null) {
fileName = NA;
}
int line = ((Integer) getLineNumberMethod.invoke(elements[caller], noArgs)).intValue();
if (line < 0) {
lineNumber = NA;
} else {
lineNumber = String.valueOf(line);
}
StringBuffer buf = new StringBuffer();
buf.append(className);
buf.append(".");
buf.append(methodName);
buf.append("(");
buf.append(fileName);
buf.append(":");
buf.append(lineNumber);
buf.append(")");
this.fullInfo = buf.toString();
}
return;
}
prevClass = thisClass;
}
return;
//其他代码
不清楚调试器是怎么实现的.
重新看了一下JDK 发现其实可以从当前线程里面拿到堆栈信息的
Java代码 收藏代码
StackTraceElement[] stes = Thread.currentThread().getStackTrace();
另外还有一个关于线程信息的类 【 java.lang.management.ThreadInfo 】
Java代码 收藏代码
ThreadInfo ThreadMXBean.getThreadInfo(long);
//获取不带堆栈信息的 ThreadInfo
ThreadInfo[] ThreadMXBean.dumpAllThreads(boolean, boolean);
//获取所有线程的 ThreadInfo 并带有堆栈信息
转载请保留地址:http://lchshu001.iteye.com/blog/1472583
发表评论
-
使用Java调用谷歌搜索
2013-10-19 12:50 869转自:http://yangshangchuan.iteye ... -
走出类加载器迷宫
2013-10-16 14:22 658这是前几天在看类加载器机制时搜到的一篇旧文,网上搜了搜 ... -
Log4j使用
2012-12-05 11:34 739... -
Java的JDBC数据库连接池实现方法
2012-09-14 10:20 707虽然J2EE程序员一般都有现成的应用服务器所带的JDBC数据库 ... -
什么是线程安全和线程不安全
2012-08-23 14:49 769什么是线程安全和线程 ... -
线程运行栈信息的获取
2012-08-23 14:49 805线程运行栈信息的获取 ... -
javassist【动态改字节码】学习三
2012-08-23 14:50 2612这里举个简单的例子,来记录下如何用CtClass创建一个类,并 ... -
javassist【动态改字节码】学习二
2012-08-22 11:53 801写了个例子。 有一个类: Java代码 package ... -
javassist[动态改字节码]学习一
2012-08-22 11:52 852前段时间为了公司里的 ... -
JVM启动参数
2012-08-22 11:51 908一、标准参数 1.-server -client 虚拟机服务器 ... -
使用javassist动态注入代码
2012-08-22 11:33 755关于java字节码的处理,目前有很多工具,如bcel,asm。 ... -
利用javaassist修改Class文件
2012-08-22 11:22 1463我们在开发中有时候会遇到这样的问题,就是使用的某个第三方包中的 ... -
JavaMail
2012-08-16 20:03 919在Java EE应用程序中,经常需要发送E-mail。Java ... -
让java变成脚本语言
2012-08-15 12:42 0今天在弄游戏的GM模块,大部分gm命令很简单,只是单纯改 ... -
JavaAgent
2012-08-13 23:43 1239-javaagent 这个JVM参数是JDK 5引进的. j ... -
在Eclipse RCP中实现控制反转(IoC)
2012-08-13 23:13 932摘要:这篇文章描述了 ... -
aop的几种实现方式
2012-08-05 21:14 9141 AOP各种的实现 AOP就是面向切面编程,我们可以从 ... -
Java编程中“为了性能”尽量要做到的一些地方
2012-07-28 21:36 571http://www.iteye.com/magazines/ ... -
java基础拾遗
2012-06-17 10:05 848. 电梯直达 楼主 发表于 2012-1-28 13: ... -
使用 HttpClient 和 HtmlParser 实现简易爬
2012-05-01 17:57 1067使用 HttpClient 和 HtmlParse ...
相关推荐
Android显示Log信息(带行号),非常好用的Android工具类!
excel vba 获取行号
介绍Mysql如何获得结果集的行号的几种方法,类似oracle的Row_no,当然有一定的局限性。请朋友们自己体会,呵呵。
log4Qt 支持函数名,类名,可以自己随意修改代码,本想免费分享,但最小是1分
通过js获取table中当前选择的一行的行号,获取当前行号后可以进行对应的操作
获取RichTextBox当前行号获取RichTextBox当前行号获取RichTextBox当前行号
C#获取当前行号,可以查看程序的执行顺序
在实际的应用中,我们经常要读取Excel的字段,比如一个医保中心程序生成的结算单是Excel格式的,我们需要读取Excel里面的内容,找到结算信息。最笨的办法就是一行一列的数,可是结算表含有很多的单元格合并的时候,...
Delphi获取TRichEdit控件光标所在的行号..rar`
NULL 博文链接:https://stefshawn.iteye.com/blog/682350
一个简单的获取异常信息的例子,包括单元名、行号等信息。注意:使用了这种方法后Assert方法将不在起作用了。因为程序将Assert方法重定向了。
VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC...
去掉源码行号 去除行号 从网页上复制源代码有的带行号,使用该工具可以去除行号
本程序可以为程序增加行号和去掉行号,在排版文档时,有时需要增加行号,有时需要去掉行号,使用该程序可以实现。
在使用 angular.js 时,注入的日志服务 $log 似乎缺乏适当的行号支持。 这是一个简单的业余项目,通过修饰 angular $log 将适当的行号添加到日志输出中。 该项目可用于获取有关以下方面的一些基本知识: Angular....
行名行号查询,更模糊更快捷的查询. 增加了数据库管理功能,导入数据格式说明参考压缩包中说明文件,方便有数据源的朋友导入数据,并上传、下载数据。 更新了行号数据库2011.06,共计117209条记录。支持一键粘贴。
VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号...
自己写的一个继承自JTable的带有行号显示功能的表格,支持增删,设置行高等动态操作。