2009-05-17 26 views
13

Tôi đang sử dụng Apache Commons Logging và SLF4J với log4j, nhưng tôi cũng muốn sử dụng log4j.properties ở một vị trí tùy chỉnh như conf/log4.properties. Đây là vấn đề:Thuộc tính Log4j tại một địa điểm tùy chỉnh

Nếu tôi sử dụng

PropertyConfigurator.configure("conf/log4j.properties"); 

sau đó ứng dụng của tôi gắn liền với log4j và đánh bại mục đích của việc có ACL và SLF4J.

Cách tốt nhất để định cấu hình ứng dụng mà không cần ứng dụng biết được triển khai ghi nhật ký là gì?

Trả lời

24

Tôi nghĩ rằng điều đơn giản nhất cần làm là chỉ định vị trí của tệp bằng cách sử dụng thuộc tính hệ thống log4j.configuration. Thông qua ví dụ trong Log4J manual:

java -Dlog4j.configuration=conf/log4j.properties -classpath ... 

Tôi tin rằng Log4J sẽ tìm thấy một file có tên "log4j.properties" bất cứ nơi nào trên classpath, nhưng có thể bị ảo giác. Giá trị cố gắng, tuy nhiên.

+9

Thực ra, tôi đã có cùng một vấn đề như OP, nhưng giải pháp của bạn không làm việc cho tôi. Tôi phải xác định vị trí của tệp log4j.properties dưới dạng kiểu URL (-Dlog4j.configuration = file: ///my/conf/log4j.properties). – Haes

+1

Upvotes tất cả các vòng. Làm việc cho tôi chỉ với một dấu gạch chéo phía trước sau tệp: -Dlog4j.configuration = tệp:/C: /JBoss51/jboss-eap-5.1 /..../ log4j.properties trên JBOSS 5.1 EAP trên máy tính Windows 7. – CodeClimber

+0

@ kdgregory ... nơi nào chúng tôi xác định vị trí của tệp, là nó trong đối số VM trong cấu hình RUN trong dự án eclipse HOẶC có phải là tệp cấu hình trong tomcat không? – MKod

3

Khi bạn nói, bằng cách gọi PropertiesConfigurator, bạn đang buộc ứng dụng của bạn vào log4j. Tuy nhiên, việc mở rộng tie này là khá hạn chế. Bạn có thể dễ dàng loại bỏ dòng gọi PropertiesConfigurator và biên dịch lại mã của bạn. Sau khi thực hiện xong, giả sử bạn đang sử dụng API SLF4J để ghi nhật ký, bạn có thể repalce log4j bằng một khung đăng nhập khác, nói logback-classic hoặc j.u.l. chỉ bằng cách thay thế các tệp jar. Vì vậy, SLF4J vẫn phục vụ mục đích của nó để mở rộng lớn. Tôi sẽ không vứt đứa bé ra bằng nước tắm.

1

Bạn có thể xác định vị trí tập tin cấu hình với lập luận VM

-Dlog4j.configuration="file:/C:/workspace3/local/log4j.properties"

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