星期五 2006年09月08日
如何在代码中输出代码所有的类及其代码行(从log4j想起的)
在使用log4j时,对其在错误时候打印的错误信息很感兴趣,能够详细的给出具体的错误信息和具体的代码位置。通常我们在代码中会增加一些调试信息,便于定位问题,在项目比较小时还是比较方便,可当项目成长起来,类似的调试信息可能存在于多个地方,或者想不起来这个调试信息是哪个方法用的。这时,如果能具体地给出调试信息所有在的类及其代码行,就方便多了。
可如何来得到当前代码所在的类和代码行,一个方法就是写死了,可是以后修改代码后就需要时时更新,这个工作量可不小。另外就是动态地提供类及其代码行,Google了一下,好像是没有相关的API。我知道通过解析类文件,是可以得到相关的信息的,可是我在代码中可以这样做吗?理论上没有问题,不过实现起来可能就比较麻烦了.
那么就来看一下log4j的源程序吧,可是找了半天,也找不到相关的处理代码。难道说log4j根本没有做相关的工作。事实就是这样,我们绕了一圈才发现真理就在眼前,可我们就是看不见。
呵呵,其实就是这么简单,Throwable类已经提供了这样的方法,log4j只是调用了Throwable.toString()方法而已,这样一切就变得简单多了,我们通过Throwable来实现这个功能吧:
public abstract class LogUtil {
public static String wrapInfo(String info) {
StringBuffer buffer = new StringBuffer();
buffer.append(info).append("\r\n").append(new Exception().getStackTrace()[1]);
return buffer.toString();
}
}
很简单吧,我们不需要完整的异常椎栈,所以只取[1]的信息(即调用本方法的类的方法的信息)
Posted at 05:58下午 九月 08, 2006 by xMatrix in Java技术 | 评论[2]