当前位置: 代码迷 >> J2SE >> 将Log4J封装成一个class,但是使用该封装class,无法定位异常到异常发生的类,或异常发生的那一行
  详细解决方案

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

热度:37   发布时间:2016-04-24 00:42:48.0
将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);    }  }}
  相关解决方案