首页 > 代码库 > jsp错误页面打印日志

jsp错误页面打印日志

其实没什么可以记载的。只是当时头晕,一直犯晕,故记录下来,防止再次犯晕。

系统中配置的错误页500.jsp。有需求是在该jsp中记录错误日志信息,当时调用了后台封装的一个组合Exception信息的方法:

public static String getStackTraceMessage(Exception e){
		String message="";
		message+=e+"\n";
		StackTraceElement[] traces = e.getStackTrace();
		if(traces!=null && traces.length>0){
			for(StackTraceElement element:traces){
				message+="\tat "+element.getClassName()+"."+element.getMethodName()+"("+
						element.getFileName()+":"+element.getLineNumber()+")\n";
			}
		}
		return message;
	}

用于记录详细的异常信息。

BUT!这个是有错误的!错误信息如下:

/WEB-INF/pages/errorpage/500.jsp:14: error: method getStackTraceMessage in class ExceptionCommonUtil cannot be applied to given types;
    logger.info("\u7a0b\u5e8f\u51fa\u73b0\u5f02\u5e38\uff1a{}", ExceptionCommonUtil.getStackTraceMessage(exception));
                                                                                   ^
  required: Exception
  found: Throwable
  reason: actual argument Throwable cannot be converted to Exception by method invocation conversion
1 error
1 warning

唉,原来jsp里面内置的exception对象是Throwable的实例。而Throwable是Exception的父类,父类转化成子类需要强转。

后来就琢磨重载一下组合方法吧,在方法里将jsp传过来的exception强转成Exception再调用原来的方法。可是又想起Throwable的子类除了Exception还有Error,虽然情况很少

出现甚至没有(没有查证),但这种设计终归不完美。

最后同事提醒了一句:为什么不用slf4j的logger.error方法啊...为什么....为...

以此文谨记我可爱的同事,谨记我的榆木疙瘩!

jsp错误页面打印日志