日期:2014-05-20  浏览次数:20791 次

将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);
    }
  }
}