转换e.printStackTrace()以改为使用log4j

时间:2012-08-30 11:45:01

标签: java log4j

我对log4j很新。我不想在我的日志文件中显示异常堆栈跟踪,例如

java.lang.IllegalArgumentException: nodeRef is a mandatory parameter
at org.alfresco.util.ParameterCheck.mandatory(ParameterCheck.java:42)

使用e.printStackTrace()之类的

直接将这些异常写入控制台
try {
    // something
} catch(Exception e) {
    StringWriter stack = new StringWriter();
    e.printStackTrace(new PrintWriter(stack));
    logger.debug("Caught exception; decorating with appropriate status template : " + stack.toString());
}

我现在自定义一个开源项目,而不是自己编写我的所有程序。 因此,不可能在所有java文件中删除e.printStackTrace();

据我所知,log4j用记录器打印的日志可以使用log4j错误级别配置,如info,debug,warn.But如何直接写入控制台或文件?

如何配置log4j不打印异常堆栈跟踪但显示其他信息?有没有办法解决它?

3 个答案:

答案 0 :(得分:8)

代码

StringWriter stack = new StringWriter();
e.printStackTrace(new PrintWriter(stack));
logger.debug("Caught exception; decorating with appropriate status template : " + stack.toString());

只是Log4j API明显错误使用的一个例子。但是,如果您坚持使用它,除了将日志级别提高到debug以上并省略整个消息之外,您将无需执行任何操作。

可能可能截断所有日志消息的方法,这可以在一定程度上缓解您的问题。

答案 1 :(得分:7)

使用记录器#错误

import org.apache.log4j.Logger;

...

Logger log = Logger.getLogger(Locomotive.class);
log.error("your message", exc);

...

答案 2 :(得分:0)

logger.info("Inside add() of Abc class");
logger.error("Error occurred while calculation::::"+errorMessage);