2012-02-02 35 views
8

Tôi muốn nhật ký nên chứa các mục nhập ngày của múi giờ cụ thể. Có cách nào để buộc múi giờ trong log4j.properties không?Đăng nhập Apache Log4j với múi giờ cụ thể

Bây giờ tôi đang sử dụng JDK 1.5, Như bạn đã biết rằng có lỗi múi giờ trong JDK 1.5 được loại bỏ trong JDK 1.5. Trong trường hợp của JDK 1.5 nó theo mặc định cho thấy múi giờ "GMT". Tôi muốn cấu hình trong Log4j múi giờ cụ thể của tôi.

+1

cụ thể hơn, làm thế nào để cho nó trông bây giờ và làm thế nào để bạn muốn nó trông như thế nào? – tartak

+0

@CatalinCiobanu Bây giờ đã rõ chưa? –

Trả lời

0

Sử dụng org.apache.log4j.helpers.DateLayout làm lớp bố cục và thuộc tính timeZone trong đó.

0

Bao gồm đối số date trong số ConversionPattern của bạn. Kể từ ngày PatternLayout documentation:

-

Được sử dụng để sản xuất các ngày của sự kiện khai thác gỗ theo múi giờ địa phương. Để xuất ngày trong thời gian quốc tế, hãy sử dụng mẫu %utcdate. Bộ định dạng chuyển đổi ngày có thể được theo sau bởi một thông số định dạng ngày được đặt giữa các niềng răng. Ví dụ: %date{HH:mm:ss,fff} hoặc %date{dd MMM yyyy HH:mm:ss,fff}. Nếu không có định dạng thông số định dạng ngày thì định dạng ISO8601 được giả định (Iso8601DateFormatter).

Trình định dạng định dạng ngày thừa nhận cú pháp giống như mẫu thời gian chuỗi của ToString.

Để có kết quả tốt hơn, bạn nên sử dụng ngày log4net trình định dạng. Chúng có thể được chỉ định bằng cách sử dụng một trong các chuỗi "ABSOLUTE", "DATE" và "ISO8601" để chỉ định AbsoluteTimeDateFormatter, DateTimeDateFormatter và tương ứng Iso8601DateFormatter. Ví dụ: %date{ISO8601} hoặc %date{ABSOLUTE}.

Các trình định dạng ngày chuyên dụng này hoạt động tốt hơn đáng kể so với ToString.

+2

Lưu ý rằng điều này dường như dành cho .net, không chắc chắn nó áp dụng cho Java - hoặc ít nhất tôi không thể tìm thấy một sự tương đương, tôi vẫn đang tìm kiếm mặc dù. –

16

này sẽ cho phép bạn xem thông tin múi giờ trong mỗi dòng của nhật ký:

%d{yyyy-MM-dd/HH:mm:ss.SSS/zzz} 

Bí quyết là bao gồm 'zzz' trong mẫu vì theo Javadoc cho java.text.SimpleDateFormat (http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html), đó là mã cho múi giờ. Log4J sử dụng các quy tắc tương tự như SimpleDateFormat.

Có nhiều chi tiết so với trong Javadoc Log4J:

http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html

Hãy tìm những hàng trong bảng nơi 'Character Chuyển đổi' là chữ 'd'.

+0

nó luôn luôn cho tôi GMT trong jdk 1.5, đó là lý do tại sao tôi muốn múi giờ cụ thể của tôi –

+0

Oh. Lấy làm tiếc. Trong trường hợp đó, đây là giải pháp của bạn (cần một bình "bổ sung"): http://stackoverflow.com/questions/1785725/specify-time-zone-of-log4js-date –

+0

Trích dẫn một phần quan trọng của javadoc của 'PatternLayout' : Mặc dù một phần của JDK chuẩn, hiệu suất của SimpleDateFormat khá kém. Để có kết quả tốt hơn, bạn nên sử dụng trình định dạng ngày tháng log4j. Chúng có thể được xác định bằng cách sử dụng một trong các chuỗi "ABSOLUTE", "DATE" và "ISO8601" để chỉ định AbsoluteTimeDateFormat, DateTimeDateFormat và ISO8601DateFormat tương ứng. Ví dụ:% d {ISO8601} hoặc% d {ABSOLUTE}. –

4

Cách tốt nhất là sử dụng Apache Extras™ for Apache log4j™ Và thay thế PatternLayout thông thường bằng org.apache.log4j.EnhancedPatternLayout cách làm như sau nếu sử dụng một tập tin bất động sản:

//log4j.appender.xxx.layout = org.apache.log4j.PatternLayout 
//Replaced by 
log4j.appender.xxx.layout = org.apache.log4j.EnhancedPatternLayout 

Sau đó, bạn có thể sử dụng% d {ISO8601} {} giờ thay vì% d trong ConversionPattern để hiển thị ngày của bạn theo định dạng giờ GMT. Bất kỳ múi giờ có thể được xác định thay vì giờ

1

Bạn có thể thêm sau dòng

log4j.appender.S.layout.ConversionPattern= %d{yyyy-MM-dd HH:mm:ss zzz}{GMT} %-5p [%t][%c:%M(%L)] %m%n 
Các vấn đề liên quan