2011-11-17 47 views
7

Tôi đang làm việc trên một ứng dụng java rất lớn với log4j, và tôi đã tự hỏi nếu có một cách để trích xuất trong thời gian chạy số logger hoạt động? Hoặc logger hiện có trong ứng dụng là gì? Mục tiêu cuối cùng của tôi là lấy danh sách tất cả các trình ghi nhật ký và thay đổi cấp độ của chúng trong thời gian chạy. Cảm ơn bạn.Số lượng logger được sử dụng

Trả lời

6

Bạn có thể thử một cái gì đó như:

Enumeration allLoggers = Logger.getRootLogger() 
.getLoggerRepository() 
.getCurrentLoggers(); 

Sau đó lặp trên allLoggers.

+0

Có lý do nào bạn làm '. getRootLogger(). getLoggerRepository() 'hai lần? – unholysampler

+0

Có đúng là bạn đang gọi 'getRootLogger(). GetLoggerRepository()' hai lần? –

+0

Xin lỗi, lỗi đánh máy khi định dạng mã. Đã sửa lỗi. –

0

để có được những người khai thác gỗ sử dụng một trong những

Logger rootLogger = LogManager.getRootLogger(); //To get the Root Logger 
Enumeration e = LogManager.getCurrentLoggers(); //To get an enumerated list of loggers 
rootLogger.getName();       //To get the logger by name 
rootLogger.getEffectiveLevel().toString();  //To get the effective level of the current logger 
logger.getParent();        //Get the ccurrent loggers' parent 
//To set a new level for a particular Logger 
Logger logger = Logger.getLogger("TestLogger"); 
L evel lev = Level.toLevel("DEBUG"); 

để thiết lập sử dụng này:

logger.setLevel(lev); 
0

Hoặc bạn chỉ có thể sử dụng LogManager.getCurrentLoggers() để trả về một Logger Enumeration .Loop qua nó và thiết lập Logger 's level by setLevel()

for (Enumeration<Logger> loggerEnumeratin = LogManager.getCurrentLoggers() ;loggerEnumeratin.hasMoreElements() ;){ 
      Logger logger = loggerEnumeratin.nextElement(); 
      logger.setLevel(Level.ERROR); 
} 
Các vấn đề liên quan