java.util.logging
giúp bạn không phải tăng thêm một tệp jar xung quanh với ứng dụng của mình và nó hoạt động tốt với Trình định dạng tốt.
Nói chung, ở đầu mỗi lớp , bạn nên có:
private static final Logger LOGGER = Logger.getLogger( ClassName.class.getName() );
Sau đó, bạn chỉ có thể sử dụng các tiện ích khác nhau của lớp Logger .
Sử dụng Level.FINE
cho mọi thứ đang gỡ lỗi ở cấp cao nhất của luồng thực thi:
LOGGER.log( Level.FINE, "processing {0} entries in loop", list.size() );
Sử dụng Level.FINER
/ Level.FINEST
bên trong các vòng lặp và ở những nơi mà bạn có thể không cần phải luôn thấy chi tiết đó khi gỡ lỗi các vấn đề về luồng cơ bản:
LOGGER.log( Level.FINER, "processing[{0}]: {1}", new Object[]{ i, list.get(i) } );
Sử dụng các phiên bản được tham số hóa của các phương tiện ghi nhật ký để tránh tạo ra hàng tấn rác nối chuỗi mà GC sẽ phải theo kịp. Object[]
như trên là giá rẻ, trên phân bổ ngăn xếp thường.
Với xử lý ngoại lệ, luôn ghi nhật ký chi tiết ngoại lệ đầy đủ:
try {
...something that can throw an ignorable exception
} catch( Exception ex ) {
LOGGER.log( Level.SEVERE, ex.toString(), ex );
}
Tôi luôn chuyển ex.toString()
như là tin nhắn ở đây, vì sau đó khi tôi " grep -n
" cho " Exception
" trong các tệp nhật ký, tôi cũng có thể thấy tin nhắn. Mặt khác, nó sẽ nằm trên dòng đầu ra tiếp theo được tạo bởi kết xuất ngăn xếp và bạn phải có RegEx cao cấp hơn để khớp với dòng đó, điều này thường giúp bạn có đầu ra nhiều hơn bạn cần xem qua.