2009-04-22 25 views
103

Tôi phải đặt biến nào/chuyển làm đối số cho JVM để nhận log4j chạy đúng? Và theo đúng nghĩa là tôi không phàn nàn và in ra bàn điều khiển. Tôi có thể xem một ví dụ điển hình không?cấu hình log4j qua (các) đối số JVM?

Lưu ý: Tôi cần tránh tạo tệp log4j.properties trong ứng dụng.

Trả lời

121

Bạn có tệp cấu hình log4j không? Chỉ cần tham khảo nó bằng cách sử

-Dlog4j.configuration={path to file} 

đó {đường dẫn đến tập tin} nên được bắt đầu bằng file:

+0

Brian - không chính xác những gì tôi đang tìm kiếm, nhưng tôi nghĩ đó là sự thỏa hiệp giữa việc di chuyển một tệp vào ứng dụng của tôi và thiết lập các thuộc tính thông qua JVM args. – jconlin

+0

Tôi nghĩ rằng khi ứng dụng của bạn trở nên phức tạp hơn (nếu có) thì tệp sẽ trở nên dễ quản lý hơn khi bạn định cấu hình nó nhiều hơn. Tuy nhiên tôi thú nhận tôi đoán như trường hợp sử dụng của bạn ở đây. –

+0

Trong trường hợp logback.xml, -Dlogback.configuration = {path to file} không hoạt động. Bất kì lời đề nghị nào? –

10

Nói chung, miễn là tập tin log4j.properties của bạn là trên classpath, Log4j nên chỉ tự động nhặt nó lên tại JVM khởi động.

+1

Điều này đúng: chỉ cần -Dlog4j.configuration nếu tệp không có trong đường dẫn lớp hoặc nếu bạn muốn sử dụng tệp không phải là tệp đầu tiên được tìm thấy trong đường dẫn lớp – javadba

17

Tôi biết điều này đã được trả lời, nhưng vì bạn nói, đây không phải là chính xác những gì bạn đang tìm kiếm, tôi muốn chỉ ra những lựa chọn sau:

Bạn cũng có thể sử dụng một lớp cấu hình thay vì các thuộc tính hoặc tệp xml.

-Dlog4j.configuratorClass=com.foo.BarConfigurator 

Xem chi tiết http://logging.apache.org/log4j/1.2/manual.html.

+1

Đây là giải pháp đúng nếu ai đó muốn tránh tạo tệp cấu hình. Bên trong lớp cấu hình tùy chỉnh của riêng bạn, bạn có thể gọi BasicConfigurator(), hoặc tạo Logger và Appender của riêng bạn theo cách bạn muốn. Nhưng tôi rất thích một tập tin cấu hình! – skiphoppy

146

Các giải pháp được sử dụng của các đối số JVM sau:

-Dlog4j.configuration={path to file} 

Nếu tập tin là KHÔNG trong classpath (trong WEB-INF/classes trong trường hợp Tomcat) nhưng ở đâu đó trên bạn đĩa, sử dụng file:, như

-Dlog4j.configuration=file:C:\Users\me\log4j.xml 

biết thêm thông tin và ví dụ ở đây: http://logging.apache.org/log4j/1.2/manual.html

+2

Đối với Logback: '-Dlogback.configurationFile = C: \ logback-test.xml' – 30thh

+2

+1 để đề cập đến tập tin (nhắc lại những gì Tim nói. Điều này đã khiến tôi phát điên với log4j nhiều lần. – javadba

+12

Một đối số JVM khác rất tiện dụng debug log4j config: '-Dlog4j.debug' –

15

Điều này dường như đã thay đổi (có lẽ với log4j2) tới:

-Dlog4j.configurationFile=file:C:\Users\me\log4j.xml 

Xem: https://logging.apache.org/log4j/2.x/manual/configuration.html

+0

Điều này cho tôi ngoại lệ sau: C: \ Development \ Eclipses \ EclipseMars \ file: C: \ Users \ ABC \ log4j2. xml Làm thế nào để tôi tạo đường dẫn tuyệt đối – Cybermonk

+1

điều này làm việc cho tôi, cảm ơn! – brendon

2

muộn để đảng như kể từ năm 2015, Log4J 1.x đã đạt EOL.

Log4J 2.x trở đi các JVM option nên -Dlog4j.configurationFile=<filename>


T.B. <filename> có thể là tệp tương ứng với đường dẫn lớp mà không cần số file: như được đề xuất trong các câu trả lời khác.

+0

Câu trả lời quan trọng vì các câu trả lời khác không còn giá trị. – Yossale

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