Log4J 1.2文档中的奇怪转换

3

我正在查看Log4J文档,无意中看到在Logger#setLevel()(从Category继承)方法的描述中有以下内容:

If you are passing any of Level.DEBUG, Level.INFO, Level.WARN, Level.ERROR, Level.FATAL as a parameter, you need to case them as Level. As in

logger.setLevel((Level) Level.DEBUG);
这种要求背后是否有原因?我是不是漏掉了什么?

1
这完全是无意义的。可能是一个历史遗留问题。你绝对不需要进行强制类型转换。 - Sotirios Delimanolis
但你也不应该再使用1.2了。 - Sotirios Delimanolis
@SotiriosDelimanolis - 不是我的选择。这是主要供应商使用的。 - PM 77-1
1个回答

2
这似乎是一个文档错误,出现在 Category.setPriority() 被弃用并在 1.2 版本中添加了 Category.setLevel() 的时候。
这是在 jakarta-log4j-1.1.3setPriority 方法最初的样子:
/**
 Set the priority of this Category.
 <p>Null values are admitted.
*/
public void setPriority(Priority priority) {
    this.priority = priority;
}

查看log4j-1.2.17setPriority的源代码,我们可以看到在该方法被弃用时,添加了一个缩小转换为Level的操作:

/**
 Set the level of this Category.
 <p>Null values are admitted.
 @deprecated Please use {@link #setLevel} instead.
*/
public void setPriority(Priority priority) {
   this.level = (Level) priority;
}

看起来,setPriority的一个实现细节不知怎么地滑进了新的setLevel方法的JavaDocs中。显然,文档是没有意义的,因为转换是不需要的。


我有这个怀疑,但是找不到任何证据。谢谢。 - PM 77-1
很难给出一个明确的答案,但这似乎是我认为最合乎逻辑的解释。 - Mick Mnemonic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接