cấu hình log4j thông qua (các) đối số JVM?


133

Những biến nào tôi phải đặt / chuyển làm đối số cho JVM để log4j chạy đúng? Và theo đúng nghĩa 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?

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


2
Người đọc hãy cẩn thận: điều quan trọng cần lưu ý là câu hỏi đang hỏi về log4j, không phải log4j2.
Neves

Câu trả lời:


161

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

-Dlog4j.configuration={path to file}

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

Chỉnh sửa: Nếu bạn đang làm việc với log4j2, bạn cần sử dụng

-Dlog4j.configurationFile={path to file}

Lấy từ câu trả lời https://stackoverflow.com/a 432001970/552525


Brian - không chính xác những gì tôi đang tìm kiếm, nhưng tôi nghĩ rằng đó là một sự thỏa hiệp hợp lý 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

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 là trường hợp sử dụng của bạn ở đây.
Brian Agnew

25
{path to file}cần phải được chuẩn bị trước file:để làm việc này.
HOẶC Mapper

2
@ORMapper - Tôi đã sửa đổi một cách thích hợp
Brian Agnew

6
Xem ra nếu sử dụng Log4j 2 làm tên thuộc tính và cú pháp thay đổi. Xem câu trả lời này .
Jose Andias

161

Giải pháp đang sử dụng đối số JVM sau:

-Dlog4j.configuration={path to file}

Nếu tệp KHÔNG ở đường dẫn lớp ( WEB-INF/classestrong trường hợp Tomcat) nhưng ở đâu đó trên đĩa của bạn, hãy sử dụng file:, như

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

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


2
Để đăng nhập lại:-Dlogback.configurationFile=C:\logback-test.xml
30h

2
+1 để đề cập đến tệp (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 một số lần.
javadba

13
Một đối số JVM khác rất tiện để gỡ lỗi cấu hình log4j:-Dlog4j.debug
KC

2
Có thể sử dụng đường dẫn tương đối với phương pháp này?
AaA

33

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

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

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


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

Đối với Docker Container, tôi đã sử dụng JAVA_PARAMS="-Dlog4j.configurationFile=classpath:log4j2-container.xml"nếu Docker Image hỗ trợ ghi đè JAVA_PARAMS bằng các env vars và tệp nằm trong Jar.
Marcello de Sales

21

Tôi biết điều này đã được trả lời, nhưng vì bạn đã nói, đây không chính xác là những gì bạn đang tìm kiếm, tôi muốn chỉ ra giải pháp thay thế 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 http://logging.apache.org/log4j/1.2/manual.html để biết chi tiết.


1
Đây là giải pháp chính xác nếu ai đó muốn tránh tạo tập tin cấu hình. Trong lớp Trình 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 Trình ghi nhật ký và Trình chỉnh sửa 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

11

Nói chung, miễn là tệp log4j.properIES của bạn nằm trên đường dẫn lớp, Log4j sẽ tự động chọn nó khi khởi động JVM.


1
Điều này là đúng: chỉ cần -Dlog4j.configuration nếu tệp không nằm 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

8

Đến bữa tiệc muộn kể từ năm 2015, Log4J 1.x đã đạt EOL .

Log4J 2.x trở đi tùy chọn JVM sẽ là-Dlog4j.configurationFile=<filename>


PS <filename>có thể là một tập tin liên quan đến các đường dẫn lớp mà không cần sự file:như đề xuất trong câu trả lời khác.


2
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

1

Đường dẫn tương đối cũng ok:

java -Dlog4j.configuration=file:".\log4j.properties" -jar com.your-1.0-SNAPSHOT.jar

hoặc là

java -Dlog4j.configuration=file:".\log4j.xml" -jar com.your-1.0-SNAPSHOT.jar

0

Nếu bạn đang sử dụng gradle. Bạn có thể áp dụng plugin 'ứng dụng' và sử dụng lệnh sau

  applicationDefaultJvmArgs = [
             "-Dlog4j.configurationFile=your.xml",
                              ]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.