log4j中怎样将异常的完整信息写入日志文件?????
log4j中怎样将异常的完整信息写入日志文件?????
比如说,现在出现如下异常:
java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) at java.lang.Integer.parseInt(Integer.java:468) at java.lang.Integer.parseInt(Integer.java:497) at qing.log.struts.action.LiuAction.execute(LiuAction.java:44) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) at javax.servlet.http.HttpServlet.service(HttpServlet.java:710) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:619)
在log4j.properties文件!log4j.appender.file=org.apache.log4j.FileAppenderlog4j.appender.file.File=D://info.log //这里设置日志文件输出路径log4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %m %nlog4j.rootLogger=DEBUG, file//定义一个类public class LogInfo { Logger logger = Logger.getLogger(LogInfo.class.getName());/** * 系统管理 */ /** * @param addmin(String * name,String addname)添加管理员 * @param name * String * @param addname * String */ public void addadmin(String name, String addname) { try { logger.debug("管理员:" + name + "添加" + addname + "为管理员"); } catch (Exception ex) { logger.info(ex.getMessage()); } } //……各种各样的方法自己定义}
[解决办法]
当发生异常的时候
在catch处调用该方法即可!
new LogInfo().addadmin(u.getUserName(),userName);//记录到日志中
[解决办法]
/** * org.apache.log4j.Logger * * private static Logger log = Logger.getLogger("在log4j.properties文件中的 appenderName"); * 把log4j.properties 放在src下. * log4j.properties 包含的内容如下: * log4j.rootLogger = [priority] , appenderName -- appenderName 为该日志的名称 , 可以为多个。 * log4j.appender 为 输出源 指定信息输出的地址: ConsoleAppender为控制台、RollingFileAppender 为文件大小到指定尺寸产生一个新的文件 * log4j.appender.layout 设置 输出源 显示格式. * * * 例如: * 配置 log4j.properties * log4j.rootLogger = ALL,Mylog,R * log4j.appender.Mylog = org.apache.log4j.ConsoleAppender * log4j.appender.Mylog.layout = org.apache.log4j.PatternLayout * log4j.appender.Mylog.layout.conversionPattern = %d %p %c --> %m%n * * * 指定日志文件放的位置 * log4j.appender.R.File=D:/env/environment/webEnv/WEB-INF/log4j.log * log4j.appender.R.MaxFileSize=100KB * log4j.appender.R.MaxBackupIndex=1 * log4j.appender.R.layout=org.apache.log4j.PatternLayout * log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n * log4j.appender.R.layout.ConversionPattern=%d %-5p [%t] (%13F:%L) %3x - %m%n * --------------------------------------- * * 在程序中: * Logger logger = Logger.getLogger("Mylog"); * PropertyConfigurator.configure("log4j.properties"); -- 自动快速的使用默认Log4j环境 * logger.debug(""); * logger.info(""); * logger.error(""); * logger.fatal(""); * logger.warn(""); * * 那个类使用日志 则参照上面代码即可。 * * */
[解决办法]
调用logger.info(getTrace(e));就可以了
public String getTrace(Throwable t) { StringWriter stringWriter= new StringWriter(); PrintWriter writer= new PrintWriter(stringWriter); t.printStackTrace(writer); StringBuffer buffer= stringWriter.getBuffer(); return buffer.toString(); }