2012-04-02 138 views
1

任何人都可以建議一種方法來在運行時檢索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; 
      }  
     }); 
    }   
} 

唯一的缺點是,我需要硬編碼添加記錄器級別,任何改進的建議,歡迎。

感謝, 馬克西姆

回答

1

您可以使用LogLevel.encompasses()來檢測不同級別之間的關係。你得到的物品看起來像是按照嚴重程度降序排列的 - 儘管我在Javadoc中沒有發現任何明確的保證。

0

也許這將幫助你

public static Priority[] getAllPossiblePriorities() 

Priority : 

    java.lang.Object 
      extended by org.apache.log4j.Priority 

將返回所有可能的優先級,級對象大小排序的數組。

+0

此方法已棄用。看[這裏](http://logging.apache.org/log4j/1.2/apidocs/index.html)。我正在尋找一個通用的解決方案。 – 2012-04-03 05:54:34