2015-01-29 21 views
11

Tôi đã tập tin cấu hình log4j2.xml tôi thiết lập để được kiểm tra mỗi 30 giây:cấu hình log4j2 Nạp lại theo yêu cầu

<Configuration status="WARN" monitorInterval="30"> 
    ... 
</Configuration> 

Có thể lập trình nói log4j2 để kiểm tra những thay đổi trong cấu hình thay vì có một thời gian chờ ?

N.B. Tôi không muốn lập trình tải cấu hình chỉ định tệp cấu hình, tôi chỉ muốn báo cho log4j2 kiểm tra tệp cấu hình đã được tải trước đó như khi monitorInterval hết hạn.

Cảm ơn!

+0

Xem https://logging.apache.org/log4j/1.2/faq.html#a3.6 – pringi

+0

@pringi Tôi không muốn có log4j "xem" tệp cấu hình ... Tôi chỉ muốn nói log4j khi để kiểm tra – jamp

Trả lời

17

Dường như tôi đã tìm thấy các giải pháp:

((org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false)).reconfigure(); 

Có ai nhìn thấy bất cứ điều gì sai/tác dụng phụ với điều này?

+0

Làm tốt lắm! Nhìn vào nguồn mà nên làm việc. –

+0

Thật không may, tôi thấy điều này có ích khi có nhiều bối cảnh ghi nhật ký, như trong OSGI hoặc trong các ứng dụng web. Trong trường hợp này, mã ở trên tải lại cấu hình chỉ trong một trong các ngữ cảnh – plinyar

3

Hiện tại không có cách nào để làm điều này. Nó có thể được thực hiện với sự phản ánh. (Tất nhiên điều này có thể phá vỡ nếu việc thực hiện thay đổi.)

CẬP NHẬT: điều này là sai. Có một cách rõ ràng, hãy xem câu trả lời của câu trả lời bên dưới.

org.apache.logging.log4j.core.LoggerContext ctx = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false); 

org.apache.logging.log4j.core.config.FileConfigurationMonitor mon = (org.apache.logging.log4j.core.config.FileConfigurationMonitor) ctx.getConfiguration().getConfigurationMonitor(); 

// use reflection to get monitor's "nextCheck" field. 
// set field accessible 
// set field value to zero 

mon.checkConfiguration(); 
+0

Tôi thực sự không muốn chấp nhận điều này như là câu trả lời: D – jamp

+0

Oh. Không có API để làm những gì bạn muốn làm. Tôi thành thật tin rằng sự phản ánh là lựa chọn duy nhất của bạn với log4j-2.1. Tất nhiên, bạn có thể nâng một yêu cầu tính năng lên trình theo dõi vấn đề Jira. –

+0

Có vẻ như bạn đúng ... không thể tìm thấy bất cứ điều gì ... :( Rất tiếc, tôi sẽ chấp nhận nó;) – jamp

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