Java 检索log4j的活动日志记录级别

Java 检索log4j的活动日志记录级别,java,logging,log4j,Java,Logging,Log4j,任何人都可以建议一种在运行时检索log4j中所有活动级别的方法吗 我尝试使用: LogLevel.getLog4JLevels() 我得到了以下列表: [FATAL, ERROR, WARN, INFO, DEBUG] 但我需要更具体的信息,比如级别之间的顺序 例如,如果我的日志记录级别为DEBUG,并且我希望将此级别更改为下一级别, 我需要知道哪个级别被定义为下一个级别(从所有活动日志级别) 我编写了以下代码: public class Log4jLevelManager { p

任何人都可以建议一种在运行时检索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;
            }       
        });
    }           
}
公共类Log4jLevelManager{
私有静态数组列表级别;
专用静态Log4jLevelManager Log4jLevelManager;
私有Log4jLevelManager(){
级别=新的ArrayList();
init();
}
公共静态Log4jLevelManager getInstance(){
if(log4jLevelManager==null){
log4jLevelManager=新的log4jLevelManager();
}
返回log4jLevelManager;
}
公共级别getNextLevel(级别){
int-levelIndex=levels.indexOf(level);
如果(levelIndex==1 | | levelIndex+1==levels.size()){
回报水平;
}否则{
返回级别。get(levelIndex+1);
}
}
公共级别getPrevLevel(级别){
int-levelIndex=levels.indexOf(level);
如果(levelIndex==1 | | levelIndex==0){
回报水平;
}否则{
返回级别.get(levelIndex-1);
}
}
私有静态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,newcomparator(){
@凌驾
公共整数比较(级别1、级别2){
如果(1级更高或同等(2级)和2级更高或同等(1级)){
返回0;
}
如果(1级)更高或同等(2级)){
返回1;
}
返回-1;
}       
});
}           
}
唯一的缺点是,我需要硬编码来添加记录器级别,欢迎提出任何改进建议

谢谢,
Maxim

它们是被订购的-第一个是最严重的,最后一个-只是打印调试信息(最不重要的)。请参阅来源:

它们已被订购-第一个是最严重的,最后一个-只是打印调试信息(最不重要)。请参阅来源:

您可以使用它来检测不同级别之间的关系。尽管我在Javadoc中没有找到任何明确的保证,但您得到的项目看起来就像是按严重程度递减排序的。

您可以使用它来检测不同级别之间的关系。不管怎样,您得到的物品看起来都是按严重程度递减排序的——尽管我在Javadoc中没有找到对此的明确保证。

这会对您有所帮助吗

public static Priority[] getAllPossiblePriorities()

Priority : 

    java.lang.Object
          extended by org.apache.log4j.Priority
它将以级别对象数组的形式按降序返回所有可能的优先级

这对你有帮助吗

public static Priority[] getAllPossiblePriorities()

Priority : 

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

它将以级别对象数组的形式按降序返回所有可能的优先级

此方法已弃用。看见我正在寻找通用解决方案。此方法已被弃用。看见我正在寻找一个通用的解决方案。没有人说它们已经排序,你是从代码而不是从API推断出来的。没有人说它们已经排序,你是从代码而不是从API推断出来的。