Java-怎么能将e.printStackTrace()写入log4j文件

发布于 2016-11-24 04:41:22 字数 2605 浏览 1540 评论 3

工程中有很多e.printStackTrace(); 这些目前只在控制台输出,现在想把这些信息都加入到log文件当中,又不想修改太多地方,有没有方法或者log4j配置能将控制台的信息输出到log文件?
比如:如下代码:
try{
String test = null;
test.trim();
}catch(Exception e){
e.printStackTrace();
}
在不做代码修改或只修改个别方法的情况下,把打出的异常堆栈写入到log文件中,不知道log4j有没有这种配置。
用logger.error()的解决办法就不用说了,这样要改的地方太多,需要不修改代码或尽量少的修改代码。
log4j配置文件如下:

log4j.rootLogger=ERROR,A1,CA

#===================================================================================================
# Thirdparty log, CA(console) output DEBUG level only.
#
log4j.A1.org.springframework=ERROR,CA
log4j.A1.org.apache=error,CA
log4j.A1.net=ERROR,CA
log4j.A1.antlr=ERROR,CA
log4j.A1.com.sun=ERROR,CA
log4j.A1.freemarker=ERROR,CA
log4j.A1.com.caucho=ERROR,CA
log4j.A1.junit=ERROR,CA
log4j.A1.common=ERROR,CA
log4j.A1.jxl=ERROR,CA
log4j.A1.oracle=ERROR,CA
log4j.A1.com.lining=error,CA
log4j.A1.xjavadoc=ERROR,CA
log4j.A1.org.exolab=error,CA
log4j.A1.org.hibernate.SQL=error,CA
log4j.A1.org.hibernate=error,CA

#==================================================================================================
# CA is set to be a ConsoleAppender,DailyRollingFileAppender
log4j.logger.CA=error,CA
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=[%p] %-d{HH:mm:ss,SSS} [%c:%L] %m%n

#========================File==================
log4j.logger.A1=error,A1

log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=C:/log/cba_log.log
log4j.appender.A1.DatePattern = '.'yyyy-MM-dd
log4j.appender.A1.Append = true
#log4j.appender.A1.MaxFileSize=5000KBs
#log4j.appender.A1.MaxBackupIndex=100
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
#log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd,HH:mm:ss} %-5p %3x %m%n
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd,HH:mm:ss} [%c:%L] %m%n
log4j.additivity.A1=false

#log4j.logger.sql=error,sql

#log4j.appender.sql=org.apache.log4j.RollingFileAppender
#log4j.appender.sql.File=../WEB-INF/ZyyStudyLog.log
#log4j.appender.sql.MaxFileSize=5000KBs
#log4j.appender.sql.MaxBackupIndex=10
#log4j.appender.sql.layout=org.apache.log4j.PatternLayout
#log4j.appender.sql.layout.ConversionPattern=%-d{yyyy-MM-dd,HH:mm:ss} %-5p %3x %m%n
#log4j.additivity.sql=false

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

清晨说ぺ晚安 2017-09-24 06:50:03

看看Throwable类的printStackTrace方法

public void printStackTrace(){
printStackTrace(System.err);
}

这里说明,printStackTrace是把消息输出到System.err的,所以要只要重定向System.err即可:

File log4j = new File("log");
PrintStream ps = new PrintStream(new DataOuputStream(new FileOutputStream(log4j)));
System.setErr(ps);

不过这里有个缺点就是所有的错误信息都会输出到这个文件里。
如果需要只针对printStackTrace的话,那么可以考虑用字节码增强来修改printStackTrace()的调用了。

归属感 2017-09-21 19:25:48

e.printStackTrace(); 默认并没有输出到控制台,尤其是在web开发中,所以,我想到的办法是,为 Tomcat 配置 log4j。

第一步:下载 log4j.jar,并把 log4j.jar 放入 $CATALINA_HOME/common/lib
第二步:新建 log4j.properties 文件,放到 $CATALINA_HOME/common/classes/ 目录下
第三步:写配置文件log4j.properties

日志文件会记录在 ${catalina.home}/logs/tomcat_log_xxxx。

灵芸 2017-02-09 05:51:24

System.setErr(new PrintStream(new File("/test.log")));
new Exception(":)").printStackTrace();

冒昧的问下..为啥有这个奇怪的需求...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文