java - 检索 log4j 的 Activity 日志记录级别

标签 java logging log4j

有人可以建议一种在运行时检索 log4j 中所有 Activity 级别的方法吗?

我尝试使用:

LogLevel.getLog4JLevels()

我得到了以下列表:

[FATAL, ERROR, WARN, INFO, DEBUG]

但我想要更具体的信息,例如级别之间的顺序。

例如,如果我的日志记录级别是 DEBUG 并且我想将此级别更改为下一个级别, 我需要知道哪个级别被定义为下一个级别(来自所有 Activity 的日志记录级别)。

我编写了以下代码:

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;
            }       
        });
    }           
}

唯一的缺点是我需要硬编码来添加记录器级别,欢迎任何改进建议。

谢谢, 马克西姆

最佳答案

您可以使用LogLevel.encompasses()来检测不同级别之间的关系。无论如何,您获得的项目看起来都是按严重性降序排序的 - 尽管我在 Javadoc 中没有找到对此的任何明确保证。

关于java - 检索 log4j 的 Activity 日志记录级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9979794/

相关文章:

java - 带有一些逻辑的 JPQL 查询

JAVA、GUI JPanel、JFrame、paintComponent、图形

logging - 使用 logfaces 的经验

Java 泛型 : Calling generic Method "...is not applicable for the arguments..."

java - Java 中的异常。我们为什么要拥有多个可检查类和一个不可检查类呢?

java - 如何使用 Tomcat 8.5.15 配置 log4j2

java - Log4j2 中的 Socket Appender 出现错误

java - jboss-序列化记录器级别不清楚

docker - 无法从 docker-compose logs -f [container name] 退出

sql-server-2008 - Sql Server 2008 调整大事务(700k+ 行/事务)