2

在大多数使用 Spring 的 Java 项目中,我在 web.xml 中找到了这个在服务器启动时执行的条目:

<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

目的是Log4jConfigListener什么?

在我的遗留项目中,我也可以看到这个设置。但是,当我深入研究代码时,我没有发现此类或此类内部调用的其他类中所做的任何特殊操作。我确信在上面的代码片段后面一定有一些好的目的,我错过了它。

在将日志放入文件的每个类中都是条目

private static final Log    log  = LogFactory.getLog(PoolManagerImpl.class);
log.debug("Number of connection pools to create = ["
    + connection.size() + "]");

即使我注释掉我的 web.xml 条目,日志记录也能正常工作。那么它的目的是什么?

4

1 回答 1

7

Log4jConfigListener一旦 Web 应用程序启动,它就会初始化 Log4j“子系统”,而不是在需要时立即“懒惰地配置”它。

在我看来,通过 Log4JConfigListener 显式初始化 log4j 的主要优点是它允许您通过使用 servlet 上下文参数来配置 log4j 配置文件的位置;根据应用程序的部署方式,这可能使某种管理员用户可以在运行时更改配置,而无需在展开的 WAR 目录中四处寻找。

请参阅Log4jConfigListener的 javadoc ,更重要的是Log4jWebConfigurer,因为它完成了真正的工作。

于 2012-04-16T08:15:38.517 回答