2014-05-11 10 views
11

Làm thế nào để tự động bật hoặc tắt một appender của rootLogger trong log4j2 bởi java lúc chạy?Làm thế nào để tự động bật hoặc tắt một appender của rootLogger trong log4j2?

ví dụ, tôi muốn vô hiệu hóa điều khiển appender:

... 
    <Loggers> 
     <Root level="INFO"> 
      <AppenderRef ref="Console"/> 
      <AppenderRef ref="RollingFile"/> 
     </Root> 
    </Loggers> 
... 

Có thể?

+0

IMO bạn sẽ cần phải thêm các trình ứng dụng theo chương trình, nếu bạn muốn thao tác chúng thông qua mã. Dưới đây là một số câu hỏi tương tự http://stackoverflow.com/questions/10699358/log4j-creating-modifying-appenders-at-runtime-log-file-recreated-and-not-appe và http://stackoverflow.com/questions/1909871/how-can-i-access-the-configuration-log4j-appenders-at-runtime – Hirak

+0

Tôi không có nhiều bối cảnh. Nhưng có lẽ bạn có thể vô hiệu hóa/kích hoạt nó thông qua JMX khi chạy? – drgn

Trả lời

0

Bạn có thể thêm bộ lọc tập lệnh vào bảng điều khiển appenderref để kiểm tra giá trị của thuộc tính hệ thống. Sau đó, chỉ cần đặt thuộc tính khi bạn muốn đăng nhập vào giao diện điều khiển bị vô hiệu hóa. Đặt lại khi bạn muốn bật lại.

1

Bạn có thể thêm hoặc xóa người lập trình theo cách lập trình. Trong trường hợp của bạn chúng ta hãy loại bỏ Console

final LoggerContext ctx = (LoggerContext) LogManager.getContext(false); 
final Configuration config = ctx.getConfiguration(); 
config.getRootLogger().removeAppender("CONSOLE"); 
ctx.updateLoggers(); 

Có một giao diện LifeCycle với các phương pháp stopstart, nhưng có vẻ như bạn không thể khởi động một appender sau khi nó đã được ngừng lại.

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