在log4j中,为什么“OFF”是最高的日志记录级别?

时间:2015-01-19 20:22:52

标签: log4j log4j2

我一直在努力直观地理解Log4J级别。

It says that

OFF has the highest possible rank and is intended to turn off logging.

说出最高等级是多么有意义?我宁愿认为DEBUGALL是最高的,即产生最多数据的级别。

谢谢!

1 个答案:

答案 0 :(得分:2)

Samudra Gupta在他的书 Pro Apache Log4j ,第二版 1 (重点是我的)中说:

  

级别附加了唯一的整数值,并排列在前面的列表中,从 最低 最高 价值。

在内部为每个级别分配一个整数值:

Level   Int Value
-----   ----------------- 
ALL     Integer.MIN_VALUE
TRACE   5000
DEBUG   10000
INFO    20000
WARN    30000
ERROR   40000
FATAL   50000
OFF     Integer.MAX_VALUE

考虑以下方法:

public void info(Object message, Throwable t) {
    if (repository.isDisabled(Level.INFO_INT))
        return;
    if (Level.INFO.isGreaterOrEqual(this.getEffectiveLevel()))
        forcedLog(FQCN, Level.INFO, message, t);
}

第一个if验证阈值。如果级别大于或等于阈值,它将写入日志。例如如果阈值为INFO,则为ERROR > INFO,但为TRACE < INFO。因此TRACE将不会被写入。

第二个if验证记录器的级别。例如如果记录器的级别为OFFERROR < OFF,则不会写入ERROR

因此,具有高值的级别将不允许在日志中写入具有较小值的级别。 OFF排名最高(Integer.MAX_VALUE)。

另一种看待这种情况的方法是Wikipedia says,即严重程度。 OFF的严重程度最高。


备注

  1. Samudra Gupta,<了解Apache Log4j ,第二版(Berkeley,California:Apress,2005),24。