Java 在没有maven的多模块J2EE web项目中配置log4j2

Java 在没有maven的多模块J2EE web项目中配置log4j2,java,logging,log4j,log4j2,Java,Logging,Log4j,Log4j2,我已经在网上搜索了一段时间,以便找到我的问题的答案,但是我能找到的所有东西都是用Maven实现的多模块项目。我的项目没有使用maven,因此它对我的场景没有帮助 我正在构建一个在Tomcat8上运行的Java8J2EEWeb服务项目,该项目分为几个单独的项目(请参见下面的项目树)。我没有使用maven,而是通过eclipse定义所有依赖项(我希望在某个时候了解maven并“mavenize”我的项目,但我还没有做到) 我如何实现以下目标: 拥有一个log4j2.xml文件,该文件将由动态web项

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

我正在构建一个在Tomcat8上运行的Java8J2EEWeb服务项目,该项目分为几个单独的项目(请参见下面的项目树)。我没有使用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)

听起来您正试图通过在类路径中包含log4j2配置文件来使用它

我进一步假设您正在尝试从Eclipse中运行代码。如果log4j2配置文件位于构建路径中包含的“源文件夹”中,或者如果您将配置文件放在jar中并将该jar添加到构建路径中,那么它将在自动配置中正常工作(无需通过系统属性指定配置文件的路径)

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

以下是我如何建立一个示例项目:

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

业务核心的内容

公共图书馆的内容:

请注意,“config”文件夹是Eclipse中的一个源文件夹(稍后您将再次看到),并且log4j2.xml包含在config文件夹中

生成路径配置:

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

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

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

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

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

最后,我添加了额外的“config”源文件夹,只是为了强调一点,即您可以将log4j2 config文件放在构建路径中的任何源文件夹中,如果您不想,则无需为其创建单独的文件夹-您可以改为将其包含在src目录中,正如您在问题中已经指出的那样