2011-12-28 48 views
6

Tôi đang gặp sự cố khi in stacktrace vào tệp nhật ký của mình. Log4j.properties:log4j cắt bớt stacktrace

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 

khi tôi đăng nhập một ngoại lệ như thế này trong lớp UserGuard.java tôi:

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

Điều này dẫn đến application.log tôi:

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

Không chồng theo dõi được hiển thị. Điều này thực sự gây phiền nhiễu. Cảm ơn!

Đã thử với cùng pom.xml và cùng một log4j.properties trên máy khác và hoạt động ok. Tôi có nên nghĩ rằng vấn đề là phiên bản java của tôi?

+0

'log4j.additivity.file = false' –

+0

Sự cố vẫn xảy ra nếu bạn sử dụng một ứng dụng khác, chẳng hạn như ConsoleAppender? Bạn đã thử chạy log4j với gỡ lỗi đầu ra được kích hoạt để bạn có thể xem nếu có bất kỳ lỗi nào trong cấu hình log4j của bạn? – chrisbunney

+0

Tôi đã thử cả hai không thành công. Xem chỉnh sửa của tôi – Gonzalo

Trả lời

6

dấu vết ngăn xếp của bạn có nhiều khả năng bị cắt ngắn do một tối ưu hóa trong Hotspot. Việc tối ưu hóa chỉ xây dựng stacktrace giống hệt nhau một số lần giới hạn, và sau đó các trường hợp ngoại lệ trong tương lai từ cùng một vị trí chính xác không xây dựng nó.

Bạn có thể tắt tối ưu hóa này bằng cách sử dụng cờ -XX:-OmitStackTraceInFastThrow hoặc quay lại nhật ký trước để tìm trường hợp ngoại lệ đầu tiên xảy ra (đã đăng nhập một lần rồi tối ưu hóa sau).

Xem liên quan này StackOverflow questionthis oneblog post over here này.

+1

Cảm ơn rất nhiều! Điều đó đã làm nó! – Gonzalo

Các vấn đề liên quan