任何人都可以建議一種方法來在運行時檢索log4j中的所有活動級別?檢索log4j的活動日誌級別
我試着使用:
LogLevel.getLog4JLevels()
和我得到了以下列表:
[FATAL, ERROR, WARN, INFO, DEBUG]
,但我希望像水平之間的訂單更具體的信息。
例如,如果我的日誌級別是DEBUG,並且我想將此級別更改爲下一級別,我需要知道哪個級別定義爲下一級別(來自所有活動日誌記錄級別)。
我寫了下面的代碼:
public class Log4jLevelManager {
private static ArrayList<Level> levels;
private static Log4jLevelManager log4jLevelManager;
private Log4jLevelManager(){
levels = new ArrayList<Level>();
init();
}
public static Log4jLevelManager getInstance(){
if (log4jLevelManager == null){
log4jLevelManager = new Log4jLevelManager();
}
return log4jLevelManager;
}
public Level getNextLevel (Level level){
int levelIndex = levels.indexOf(level);
if (levelIndex == -1 || levelIndex + 1 == levels.size()){
return level;
}else{
return levels.get(levelIndex + 1);
}
}
public Level getPrevLevel (Level level){
int levelIndex = levels.indexOf(level);
if (levelIndex == -1 || levelIndex == 0){
return level;
}else{
return levels.get(levelIndex - 1);
}
}
private static void init(){
levels.add(Level.OFF);
levels.add(Level.ALL);
levels.add(Level.DEBUG);
levels.add(Level.WARN);
levels.add(Level.ERROR);
levels.add(Level.FATAL);
levels.add(Level.INFO);
Collections.sort(levels, new Comparator<Level>(){
@Override
public int compare(Level level1, Level level2) {
if (level1.isGreaterOrEqual(level2) & level2.isGreaterOrEqual(level1)){
return 0;
}
if (level1.isGreaterOrEqual(level2)){
return 1;
}
return -1;
}
});
}
}
唯一的缺點是,我需要硬編碼添加記錄器級別,任何改進的建議,歡迎。
感謝, 馬克西姆
沒有人說他們已經訂購了,你可以從代碼中推斷出來,而不是從API中推斷出來。 – 2012-04-03 08:15:11