首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

将Log4J封装成一个class,但是使用该封装class,无法定位异常到异常发生的类,或异常发生的那一行

2012-08-03 
将Log4J封装成一个class,但是使用该封装class,无法定位错误到错误发生的类,或错误发生的那一行,public cla

将Log4J封装成一个class,但是使用该封装class,无法定位错误到错误发生的类,或错误发生的那一行,
public class Log {
private static Logger log = Logger.getLogger(Log.class.getName());
  DOMConfigurator.configureAndWatch("log4j.xml");
public static void Debug(Object message)
{
if(log.isDebugEnabled())
{
log.debug( message );
}
}
……………………



在别的文件调用Log.Debug("Error"); 定位错误发生的类会定位到Log类,但我希望如果是在类MyApp里发生的错误可以定位到MyApp里。
请问有什么解决办法没?急…… 先感谢一下。

[解决办法]
你不要多此一举封装:
1 无法看到stack trace
2 你这样做严重违背了if (log.isXxxEnabled())的目的
原先

Java code
if (log.isDebugEnabled()) {  log.debug("这行代码会导致" + veryLongText + "的字符串拼接,而这个拼接是" + meaningless + ", 所以通过isXxxEnabled判断,避免拼接");}
[解决办法]
看在楼主的头像和我QQ的一样, 就回复了..
Java code
// 如果是jdk1.5可以这么写了, 如果是1.4的话, 自己抛个异常再解析吧..// 最好把log4j中的%M和%c选项去掉, 因为已经包含了这些信息public static void debug(Object message) {  if (log.isDebugEnabled()) {    StackTraceElement[] stes = Thread.currentThread().getStackTrace();    if (stes.length > 2) {      log.debug(stes[2] + " - " + message);    } else {      log.debug(message);    }  }} 

热点排行
Bad Request.