2016-08-22 251 views
2

我一直在搜索Web和SO一段时间来找到我的问题的答案,但是我能找到的所有东西都解决了实现的多模块项目Maven的。我的项目不使用maven,所以它不能帮助我的场景。在没有maven的多模块J2EE web项目中配置log4j2

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

我该如何实现以下功能: 有一个log4j2.xml文件可供动态Web项目和所有Java子项目使用。到目前为止,唯一对我有效的工作是在项目的的每个的src文件夹中存在log4j2.xml文件的副本。 我已经尝试了各种各样的东西,比如将配置文件放在一个共享文件夹中,并将文件夹添加到每个项目的类路径,或将文件放置在所有人使用的CommonLib项目中,但是每次不断收到log4j警告,发现没有配置文件。

这里是我的项目树:

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

回答

0

这听起来像你试图通过包含在类路径中log4j2配置文件使用log4j2 automatic configuration

我进一步假设你正试图从Eclipse中运行你的代码。使用自动配置(不指定通过系统属性指定配置文件的路径)的唯一方式是如果log4j2配置文件位于构建路径中包含的“源文件夹”内,或者如果将配置文件文件放入jar文件中,然后将该jar添加到您的构建路径中。

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

下面是我设置了一个示例项目:

根级别项目文件夹的内容非Maven的网络项目log4j2

enter image description here

BusinessCore的内容

enter image description here

内容CommonLib

enter image description here

注意“config”文件夹是源文件夹在Eclipse(您稍后也会再看到这一点),而且log4j2.xml包含在config文件夹。

构建路径配置:

非Maven的网络项目log4j2对BusinessCore项目

enter image description here

BusinessCore对CommonLib依赖的依赖(没有截图,这是与以前几乎相同)

CommonLib有一个额外的源文件夹叫做config:

enter image description here

与此配置文件夹包含log4j2.xml文件:

enter image description here

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

作为最后一点 - 我添加了额外的“config”源文件夹,以强调您可以将log4j2配置文件放置在构建路径中的任何源文件夹中的位置,因此无需为此创建单独的文件夹如果你不想 - 你可以把它包含在你的问题中已经提到的src目录中。