log4j усекает трассировку стека - PullRequest
6 голосов
/ 28 декабря 2011

У меня проблема с печатью трассировки стека в мой файл журнала.Log4j.properties:

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=/var/log/app/application.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n

log4j.rootLogger=warn, file
log4j.logger.com.app=info, file
log4j.additivity.com.app=false

когда я регистрирую исключение, подобное этому, в моем классе UserGuard.java:

} catch (Exception e) {
    log.error("Uncaught error", e);
    response.setEntity(new StringRepresentation(" "));
    response.setStatus(Status.SERVER_ERROR_INTERNAL);
}

Это приводит к моему application.log:

2011-12-28 07:30:03 UserGuard [ERROR] Uncaught error
java.lang.NullPointerException

Трассировка стека не показана.Это действительно раздражает.Спасибо!

Пробовал с тем же pom.xml и таким же log4j.properties на другом компьютере и работает нормально.Должен ли я думать, что проблема в моей версии Java?

Ответы [ 2 ]

6 голосов
/ 04 января 2013

Трассировки вашего стека, скорее всего, обрезаются из-за оптимизации в Hotspot.Оптимизация создает одинаковую трассировку стека только ограниченное количество раз, и затем будущие экземпляры исключения из одного и того же точного места не создают ее.

Вы можете отключить эту оптимизацию, используя флаг -XX:-OmitStackTraceInFastThrowили вернитесь к более ранним журналам, чтобы найти первый экземпляр этого исключения (он был зарегистрирован один раз, а затем оптимизирован позже).

См. этот связанный вопрос StackOverflow и этотодин и этот пост в блоге здесь .

0 голосов
/ 28 декабря 2011
...