Java-怎么能将e.printStackTrace()写入log4j文件
工程中有很多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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
看看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()的调用了。
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。
System.setErr(new PrintStream(new File("/test.log")));
new Exception(":)").printStackTrace();
冒昧的问下..为啥有这个奇怪的需求...