2012-10-05 10 views
14

Tôi có một file jar như sau Manifesttải log4j.properties với JAR

Manifest-Version: 1.0 
Created-By: 1.7.0_07 (Oracle Corporation) 
Main-Class: test.Main 
Class-Path: ./log4j.properties lib/log4j-1.2.17.jar 

tôi chạy lớp như sau

java -jar test.jar 

Và đây là thư mục của tôi

lib 
log4j.properties 
test.jar 

Tại sao tôi không thể thấy tệp thuộc tính log4j? Đây là những gì tôi nhìn thấy

log4j:WARN No appenders could be found for logger (test.Main). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 

Cảm ơn bạn

SOLUTION: thay đổi classhpath tôi trong MANIFEST đến file

Class-Path: . lib/log4j-1.2.17.jar 
+0

Dup: http://stackoverflow.com/questions/8897528/problems-to-put-log4-properties-classpath – Vadzim

Trả lời

9

Thuộc tính này doesn' đi trong classpath, bạn phải cung cấp nó và gọi từ mã như được hiển thị here.

EDIT: Với cấu trúc thư mục của bạn, bạn gọi nó là như thế này:

PropertyConfigurator.configure("log4j.properties"); 

EDIT2:

Ngoài ra, bạn phải cung cấp appender cho nó:

log4j.rootLogger=DEBUG, Appender1 
log4j.logger.[logger-name]=level, Appender1 
log4j.appender.Appender1=org.apache.log4j.ConsoleAppender 
log4j.appender.Appender1.layout=org.apache.log4j.PatternLayout 
log4j.appender.Appender1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 

Nếu bạn muốn tốt hơn kiểm soát ghi nhật ký, xóa dòng đầu tiên (thư mục gốc) và đặt dòng thứ hai thay vì [logger-name] bạn đặt gói trên cùng để tất cả các lớp bị chèn vào e gói đó có thể sử dụng đăng nhập.

Bạn có thể xác định nhiều ứng dụng và gán chúng cho các lớp khác nhau theo cách đó.

12

Bạn cũng có thể bắt đầu JVM của bạn với lập luận:

-Dlog4j.configuration=file:"./your/properties/path/log4j.properties" 

để xác định vị trí tùy ý các đặc tính log bên ngoài của bạn. Tôi đã sử dụng rất nhiều trong một dự án cụ thể.

+0

'log4j.configuration 'là dành cho cấu hình xml – Vadzim

+3

Vâng, bạn của tôi, nó hoạt động tốt với tệp thuộc tính. Hãy thử nó và xem. – Less

+0

Các phiên bản jar được sử dụng: log4j-1.2.14, slf4j-api-1.5.8, slf4j-log4j12-1.5.8 – Less

0

PropertyConfigurator.configure(ABC.class.getResourceAsStream("log4j.properties")) làm việc chính xác, nhưng về cơ bản bạn cần đặt tệp thuộc tính Log4j trong thư mục Mã nguồn (bên cạnh Lớp Java).

HOẶC bạn có thể thử đặt bên ngoài và cung cấp cho con đường đúng đắn trong getResourceAsStream("resources/log4j.properties") phương pháp