我有通过log4j配置的休眠日志:
log4j.logger.org.hibernate=INFO
如果出现错误,我只会收到异常消息而不是完整的堆栈跟踪:
[APPNAME] 2014-09-08 15:44:40,487 ERROR [http-bio-808-exec-3] SqlExceptionHelper.logExceptions(146) | ERROR: column user0_.nationality does not exist
Position: 1365
因为SqlExceptionHelper.logExceptions()具有:
public void logExceptions(SQLException sqlException, String message) {
if ( LOG.isEnabled( Level.ERROR ) ) {
if ( LOG.isDebugEnabled() ) {
message = StringHelper.isNotEmpty( message ) ? message : DEFAULT_EXCEPTION_MSG;
LOG.debug( message, sqlException );
}
final boolean warnEnabled = LOG.isEnabled( Level.WARN );
while ( sqlException != null ) {
if ( warnEnabled ) {
LOG.warn( "SQL Error: " + sqlException.getErrorCode() + ", SQLState: " + sqlException.getSQLState() );
}
LOG.error( sqlException.getMessage() );
sqlException = sqlException.getNextException();
}
}
}
现在我为整个hibernate激活DEBUG之后,它确实打印了stackTrace,但是记录了很多垃圾。我该怎么做才能记录stackTraces?
将包标记为包的类SqlExceptionHelper
到DEBUG可以解决问题,但不确定我是否会获得hibernate生成的所有错误日志。
任何帮助?
答案 0 :(得分:0)
要查看堆栈跟踪,您需要使用
LOG.error(sqlException.getMessage(), sqlException);
你能扩展SqlExceptionHelper并覆盖logExceptions方法,以便它使用这一行吗?
答案 1 :(得分:0)
#log4j.rootLogger=@replaced.log4j.rootLogger@
log4j.appender.logfile.File=@replaced.log4j.appender.logfile@
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.MaxFileSize=512KB
# Keep three backup files
log4j.appender.logfile.MaxBackupIndex=3
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
#Pattern to output : date priority [category] - <message>line_separator
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - <%m>%n
log4j.category.net.sf.acegisecurity=INFO
log4j.category.com.dc=DEBUG
log4j.category.org.apache.myfaces=INFO
log4j.category.javax.faces=INFO
# logs the SQL statements
#log4j.logger.org.hibernate.SQL=DEBUG
# Logs the JDBC parameters passed to a query
#log4j.logger.org.hibernate.type=TRACE
# Root logger option
log4j.rootLogger=INFO, stdout
以上log4j设置应该有帮助,然后您需要使用的是
LOGGER.error(e,e)//其中e是异常对象
希望这有帮助