在没有maven

时间:2016-08-22 20:02:39

标签: java logging log4j log4j2

我已经在网上搜索了一段时间,现在找到我的问题的答案,但我能找到的所有内容都解决了用Maven实现的多模块项目。我的项目不使用maven,所以它对我的场景没有帮助。

我正在构建一个在Tomcat 8上运行的Java 8 J2EE Web服务项目,并将其分解为几个单独的项目(请参阅下面的项目树)。我没有使用maven,我通过eclipse定义所有依赖项(我希望在某些时候了解maven和#34; mavenize"我的项目,但我还没有)。

如何实现以下目标: 拥有一个log4j2.xml文件,该文件将由动态Web项目和所有Java子项目使用。到目前为止,唯一对我有用的是在项目的每个的src文件夹中提供log4j2.xml文件的副本。 我尝试了各种各样的事情,例如将配置文件放在共享文件夹中,并将文件夹添加到每个项目中。类路径,或将文件放在CommonLib项目中,供所有人使用,但每次我都收到log4j警告,没有找到配置文件。

这是我的项目树:

Services (Dynamic web project)
   ^
   |__ BusinessCore (Java project)
   |         ^
   |         |___ DAO (Java project)
   |         |     ^
   |_________|_____|__CommonLib (Java project)

1 个答案:

答案 0 :(得分:0)

听起来您通过在类路径中包含log4j2配置文件来尝试使用log4j2 automatic configuration

我进一步假设您正在尝试从Eclipse中运行代码。它可以正常使用自动配置(没有通过系统属性指定配置文件的路径)是唯一的方法是log4j2配置文件是在"源文件夹"它包含在构建路径中,或者如果您将配置文件放在jar中并将该jar添加到构建路径中。

因此,假设您正在使用log4j2.xml文件,如果将log4j2.xml放在CommonLib项目的源文件夹中,并将此项目包含在其他项目的构建路径中(以及必要的项目) log4j2罐)它应该工作正常。

以下是我设置示例项目的方法:

根级项目文件夹的内容非maven-web-project-log4j2

enter image description here

BusinessCore 的内容:

enter image description here

CommonLib 的内容:

enter image description here

请注意" config"文件夹是Eclipse中的源文件夹(稍后会再次看到),并且log4j2.xml包含在config文件夹中。

构建路径配置:

非maven-web-project-log4j2依赖于BusinessCore项目

enter image description here

BusinessCore依赖于CommonLib(没有屏幕截图,它与之前的几乎相同)

CommonLib有一个额外的源文件夹,名为config:

enter image description here

此config文件夹包含log4j2.xml文件:

enter image description here

每个项目的源文件夹中都有一个简单的类,它从其子项目中引用一个类。在非maven-web-project-log4j2项目中,有一个类引用BusinessCore中的类,而在BusinessCore中有一个类引用CommonLib中的类。每个类都生成一个log4j2消息。当我从根项目运行该类(非maven-web-project-log4j2)时,我能够看到所有日志和日志都具有我在log4j2配置文件中指定的模式,这确认了log4j2能够找到它的配置。

作为最后一点 - 我添加了额外的" config"源文件夹只是为了强调你可以将log4j2配置文件放在构建路径中的任何源文件夹中,如果你不想创建一个单独的文件夹,你可以改为正如您在问题中已经提到的那样,它位于src目录中。