一个多模块的Maven项目中的log4j

4

如何在多模块Maven项目中实现log4j?我需要将“log4j.properties”文件添加到每个子模块的src/main/resources目录中吗?如果是这样的话,我是否需要为每个文件附加器指定不同的输出文件?还是有一种方法可以为整个项目拥有一个总体的log4j.properties文件,而不必处理配置问题。哪种方法(许多log4j.properties文件与一个)更常见和更好的做法?提前感谢您的所有反馈。


问题是你想要实现什么?你可以创建一个单独的Maven模块,其中包含src/main/resources中的log4j.properties文件,该文件将用于其他生产环境。或者我们是在谈论单元测试吗? - khmarbaise
1个回答

3
这取决于您打算如何部署和运行此项目。对于分层多模块项目,通常会在具有main方法的模块中包含一个log4j配置文件,以启动程序。
例如,考虑一个简化的设置,其中项目clientserver都依赖于framework共享类(RMI接口、域对象等)。客户端作为桌面应用程序运行,有自己的main入口点,因此在src/main/resources下有自己的log4j.properties文件。服务器模块也是如此。但是,Framework不会获得属性文件--其记录器调用将由调用模块配置的任何记录器处理。

抱歉,我应该提到这一点 - 我正在使用jetty运行项目。如何配置log4j与jetty?我还希望能够在没有jetty的情况下运行单元测试,并仍然记录日志。或者使用Tomcat运行项目并仍然记录日志。它显然是一个Web应用程序。 - ktm5124
1
log4j的后续版本应该能够在类路径中检测到配置文件,如果您将其放在src/main/resources文件夹中,则会自动检测。它不应该需要针对Jetty进行不同的配置。我通常不希望在我的JUnit测试中记录日志--您可以通过在src/test/resources中放置不同的属性文件来覆盖默认配置,以使用特定于测试的配置。 - Thorn G

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