任何人都可以建议一种在运行时检索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;
}
});
}
}
唯一的缺点是我需要硬编码来添加记录器级别,欢迎任何改进建议。
谢谢, 马克西姆
答案 0 :(得分:1)
您可以使用LogLevel.encompasses()
来检测不同级别之间的关系。你得到的物品看起来像是按照严重程度下降的顺序排列 - 尽管我在Javadoc中没有找到任何明确的保证。
答案 1 :(得分:0)
它们是有序的 - 第一个是最严重的,最后一个 - 只是打印调试信息(最不重要)。请参阅来源:http://bethecoder.com/open-source/log4j/log4j-1.2.16/org/apache/log4j/lf5/LogLevel.java.html
答案 2 :(得分:0)
愿这会帮到你
public static Priority[] getAllPossiblePriorities()
Priority :
java.lang.Object
extended by org.apache.log4j.Priority
将以降序的形式返回所有可能的优先级作为Level对象的数组。