2012-06-05 41 views
13

Log4j quản lý nhiều log4j.properties trong đường dẫn lớp của nó như thế nào? Tệp log4j.properties nào được ưu tiên? Hãy để tôi mô tả kịch bản chính xác.Nhiều tệp Log4j.properties trong đường dẫn lớp

Tôi có nhiều mô-đun maven được phát triển bởi các nhóm khác nhau và mỗi mô-đun có một tệp log4j.properties riêng. Tất cả các tệp log4j.properties này đều có RootLogger được cấu hình cùng với ConsoleAppender và FileAppenders.

Bây giờ, khi Log4j tải tệp log4j.properties nào nó sẽ sử dụng để định cấu hình cài đặt RootLogger? Ngoài ra, Log4j sẽ tạo ra hệ thống phân cấp Logger như thế nào? Tập tin log4j.properties trong các lọ bên thứ 3 khác ảnh hưởng đến quá trình đăng nhập như thế nào?

Trả lời

9

Tệp đầu tiên trong đường dẫn lớp sẽ được tải. Vì vậy, nếu A.jar và B.jar đều chứa một tập tin, và A.jar đến trước B.jar trong classpath, tập tin của A.jar sẽ được tải. Đó là cách trình nạp lớp hoạt động.

+0

Tôi có một yêu cầu cụ thể Nếu tôi muốn tải cả nộp các thuộc tính làm thế nào tôi có thể đạt được nó? Tôi có nghĩa là các tập tin log4j.properties từ cả hai a.jar và b.jar nên được nạp ... Có cách nào không ?? – Gourabp

+0

Tại sao bạn cần phải tải cả hai? Mục tiêu của việc định cấu hình bên ngoài tệp là có thể định cấu hình ghi nhật ký theo cách bạn muốn. Vì vậy, các tập tin jar thậm chí không nên đi kèm với một tập tin log4j.xml đi kèm.Thay vào đó, chúng sẽ ghi lại logger mà chúng sử dụng (theo quy ước, tên logger là tên lớp), và sau đó là trình ứng dụng, sử dụng cả hai tệp jar, sẽ tạo tệp cấu hình riêng của nó, chứa cấu hình cho tất cả các thư viện được sử dụng trong ứng dụng. –

+0

Tôi muốn tải cả hai người trong số họ vì tôi đang viết một api của khách hàng nơi tôi muốn ghi nhật ký api cụ thể của khách hàng vào một tệp riêng biệt. ứng dụng có thể có cấu hình log4j riêng nhưng tôi không muốn phía máy khách thay đổi bất cứ thứ gì. Tôi sẽ chỉ cung cấp cho họ các api jar, nơi api cụ thể appender và logger sẽ được xác định. Cũng lưu ý rằng tôi không muốn đạt được nó theo chương trình tôi muốn làm điều đó bằng cách cấu hình. – Gourabp

2

log4j ver 1.x:

Như những người khác đã nói, log4j tìm kiếm các tập tin cấu hình đầu tiên trong classpath. Xem: http://logging.apache.org/log4j/1.2/manual.html

Nhưng khi có cả tệp 'log4j.xml' và 'log4j.properties' trong đường dẫn lớp, có vẻ như từ thử nghiệm mà log4j ưu tiên cho 'log4j.xml' trên 'log4j.properties'.

ví dụ: Đầu tiên, log4j dường như tìm trong đường dẫn lớp cho tệp 'log4j.xml' đầu tiên. Nếu không có, thì log4j dường như sau đó tìm trong classpath cho tệp 'log4j.properties' đầu tiên.

Sao chép và dán từ mã dưới đây có thể giúp trong việc xác định những tập tin cấu hình đang được sử dụng:

import org.apache.log4j.Logger; 

public class TestLog4j 
{ 

    static 
    { 
    System.out.println("Classpath: [" + System.getProperty("java.class.path") + "]"); 
    System.out.println("Found logging configuration files:"); 
    System.out.println(" log4j.xml: " + Logger.getRootLogger().getClass().getResource("/log4j.xml")); 
    System.out.println(" log4j.properties: " + Logger.getRootLogger().getClass().getResource("/log4j.properties")); 
    } 

    public static void main(String[] args) 
    { 
    System.out.println("main():"); 
    } 
} 

Edit:

log4j ver 2.x:

Các thứ tự tìm kiếm cho tệp cấu hình mặc định được ghi lại ở đây: http://logging.apache.org/log4j/2.x/manual/configuration.html

tức là đối với phiên bản log4j 2.x, nếu không tìm thấy tệp cấu hình ưu tiên cao hơn (ví dụ: log4j2-test. [thuộc tính | yaml | json | xml]) thì tệp log4j2.properties được sử dụng nếu tìm thấy trong classpath. Lưu ý rằng log4j2.xml có mức ưu tiên thấp nhất, và sẽ chỉ được sử dụng nếu không tìm thấy tập tin cấu hình 'yaml' hoặc 'json' của log4j2 '.

Lưu ý: Để hỗ trợ gỡ lỗi các vấn đề cấu hình log4j, hãy đặt thuộc tính 'log4j.debug', ví dụ: với:

java -Dlog4j.debug ... 

Xem thêm:How to initialize log4j properly?

+0

có vẻ như đó là cách khác? tham khảo [link] (https://logging.apache.org/log4j/2.x/manual/configuration.html) –

+0

Trả lời chỉnh sửa để phản ánh log4j ver 2.x, thêm liên kết vào tài liệu (nhờ @chandra_cst) và gỡ lỗi bổ sung dấu. –

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