Java 在Eclipse项目中放置Log4j.properties的正确位置在哪里?

Java 在Eclipse项目中放置Log4j.properties的正确位置在哪里?,java,eclipse,log4j,classpath,Java,Eclipse,Log4j,Classpath,在我的Eclipse项目中,我应该在哪里添加log4j.properties文件,以便它能够按预期工作?将log4j.properties文件添加到项目的运行时类路径。 有些人将其添加到源代码树的根目录中(以便将其复制到已编译类的根目录中) 编辑: 如果您的项目是maven项目, 您可以将log4j.properties放入src/main/resources文件夹(以及单元测试的src/test/resources) 如果您有多个环境(例如开发和生产环境), 希望每个环境都有不同的日志记录,

在我的Eclipse项目中,我应该在哪里添加
log4j.properties
文件,以便它能够按预期工作?

将log4j.properties文件添加到项目的运行时类路径。 有些人将其添加到源代码树的根目录中(以便将其复制到已编译类的根目录中)

编辑: 如果您的项目是maven项目, 您可以将log4j.properties放入src/main/resources文件夹(以及单元测试的src/test/resources)

如果您有多个环境(例如开发和生产环境), 希望每个环境都有不同的日志记录, 并且希望将相同的jar(或war或ear)文件部署到每个环境中 (与针对所有环境的一次构建一样) 然后将log4j.properties文件存储在jar文件之外,并将其放入每个环境的类路径中(可由环境配置)。 过去,我会在类路径中的每个环境中包含一些已知的目录,并在那里部署特定于环境的东西。 例如
~tomcat_user/localclasspath,其中~tomcat_user是运行tomcat实例的用户的主目录,我的war文件将部署到该实例。

在运行时类路径中放置
log4j.properties


这显示了一些关于可能的方法的帖子

最好的方法是创建名为
resources
的特殊源文件夹,并将其用于包括log4j.properties在内的所有资源。所以,把它放在那里


在动态Web项目自动创建的Java资源文件夹上,右键单击并添加一个新的源文件夹,并将其命名为“Resources”。然后,此处的文件将导出到war文件中的classes目录中,IMO最安全的方法是指向运行/调试配置中的文件

-Dlog4j.configuration=file:mylogging.properties
!!请注意:在使用eclipse启动配置时,必须指定
文件:
协议

通过这种方式,记录器将不会捕获类路径中之前的任何logging.properties,也不会捕获JDK中的默认logging.properties


也可以考虑实际使用Log4j.xml,它具有更丰富的表达式语法并允许更多的东西(Log4j.xml塔河优先于Log4j.Projices,

< p>您可以在需要的地方添加它,当您运行项目时,配置类路径,并通过单击: 运行->运行配置->类路径选项卡->单击用户条目->高级->选择添加文件夹->选择log4j.properties文件的位置

然后->确定->运行


而且应该加载它

这个问题已经得到了回答

类路径从不包括特定的文件。它包括目录和jar文件。因此,请将该文件放在
类路径中的目录中


Log4j
属性(通常)不用于开发应用程序(除非您正在调试Eclipse本身!)。因此,您真正想要构建可执行Java应用程序(应用程序、WAR、EAR或其他)并在运行时类路径中包含
Log4j
属性的是什么呢“参考资料如前所述,但对于web应用程序,我使用ant任务将
log4j.properties
复制到web-INF/classes目录。这与将文件放在src/文件夹的根目录相同,但通常我更喜欢在专用文件夹中查看它

对于Maven,通常放在文件夹
src/main/resources
中,如本文所述。 那里的所有资源都将进入根类路径中的构建(例如,
target/classes/


如果您想要一个功能强大的记录器,还可以查看哪个是记录器外观,并且可以使用后面的log4j实现。

我发现log4j.properties文件的位置取决于Eclipse项目的类型

具体地说,对于Eclipse动态Web项目,大多数涉及将log4j.properties添加到war文件的答案实际上并没有将属性文件添加到正确的位置,特别是对于Tomcat/Apache

下面是我对这个问题的一些研究和解决方案(同样是专门针对运行在Tomcat/Apache6.0上的动态Web项目)

  • 请参阅这篇关于Tomcat如何加载类的文章。它不同于Java的普通类加载器。()请注意,它只在war文件中的两个位置出现,WEB-INF/classes和WEB-INF/lib

  • 请注意,对于动态Web项目,将.properties文件存储在build/./classes目录中是不明智的,因为每当清理生成项目时,该目录都会被删除

  • Tomcat不处理WEB-INF/lib位置中的.property文件

  • 您不能将log4j.properties文件存储在src目录中,因为Eclipse会将该目录从视图中抽象出来

  • 我发现解决这个问题的一种方法是修改构建并添加一个额外的目录,该目录最终将加载到war文件中的WEB-INF/classes目录中

(1) 在项目资源管理器中右键单击项目,选择“新建”->“文件夹”。您可以将文件夹命名为任何名称,但本例中的标准名称为“资源”。新文件夹应显示在项目的根级别

(2) 将log4j.properties文件移动到此新文件夹中

(3) 再次右键单击项目,然后选择“生成路径”->“配置生成路径”。选择“源”选项卡。单击“添加文件夹”按钮。浏览以查找您在上述步骤(1)中创建的新文件夹。选择“确定”

(4) 回到eclipseprojectexplorer视图后,请注意该文件夹现在已移动到“Java资源”区域(即,由于eclipse表示抽象,它不再位于根目录下)

(5) 清理并构建您的项目

(6) 要验证.fi属性