【发布时间】:2011-07-02 03:58:39
【问题描述】:
我应该在我的 Eclipse 项目中的哪个位置添加 log4j.properties 文件以便它按预期工作?
【问题讨论】:
-
你的问题太模糊了。通常它被添加到类路径中。右键单击项目,构建路径。
标签: java eclipse log4j classpath
我应该在我的 Eclipse 项目中的哪个位置添加 log4j.properties 文件以便它按预期工作?
【问题讨论】:
标签: java eclipse log4j classpath
您可以将它添加到您想要的任何位置,当您运行项目时,配置类路径并通过单击添加 log4j.properties 文件的位置: 运行->运行配置->[类路径选项卡]->单击用户条目->高级->选择添加文件夹->选择log4j.properties文件的位置
然后 -> 确定 -> 运行
它应该被加载
【讨论】:
log4j.properties /org/example/mylibrary/log4j.properties。这样它就不会被我的库用户自动捕获,但如果他们的 JVM 配置了-Dlog4j.configuration=...,或者至少可以将它们作为他们自己的log4j.properties 的参考,它仍然可以使用。
IMO 最安全的方法是指向运行/调试配置中的文件
-Dlog4j.configuration=file:mylogging.properties
!请注意:使用 eclipse 启动配置时,file: 协议的规范是强制性的。
通过这种方式,记录器不会捕获任何出现在类路径中的 logging.properties,也不会捕获 JDK 中的默认属性。
另外,考虑实际使用 log4j.xml,它具有更丰富的表达式语法并允许更多的东西(log4j.xml tahe 优先于 log4j.properties。
【讨论】:
将 log4j.properties 文件添加到项目的运行时类路径中。 有些人将它添加到源代码树的根目录(以便将其复制到已编译类的根目录)。
编辑: 如果您的项目是 Maven 项目, 您可以将 log4j.properties 放在 src/main/resources 文件夹中(以及用于单元测试的 src/test/resources)。
如果您有多个环境(例如开发和生产), 想要为每个环境使用不同的日志记录, 并希望将相同的 jar(或 war,或 ear)文件部署到每个环境 (就像在一个构建中适用于所有环境一样) 然后将 log4j.properties 文件存储在 jar 文件之外,并将其放在每个环境的类路径中(可由环境配置)。 从历史上看,我会在类路径中的每个环境中包含一些已知目录,并在那里部署环境特定的东西。 例如, ~tomcat_user/localclasspath 其中 ~tomcat_user 是将运行我的 war 文件将部署到的 tomcat 实例的用户的主目录。
【讨论】:
最好的方法是创建名为resources 的特殊源文件夹并将其用于包括log4j.properties 在内的所有资源。所以,把它放在那里。
在动态 Web 项目自动创建的 Java 资源文件夹上,右键单击并添加一个新的源文件夹并将其命名为“资源”。然后这里的文件会被导出到war文件到classes目录下
【讨论】:
如果你有一个库并且想要附加 log4j:
(我假设您添加了 log4j 库。)
PD:对不起我的英语。
【讨论】:
这个问题已经回答here
类路径从不包含特定文件。它包括目录和 jar 文件。因此,将该文件放在您的classpath 中的目录中。
Log4j 属性(通常)不用于开发应用程序(除非您正在调试 Eclipse 本身!)。因此,您真正想要构建可执行的 Java 应用程序(Application、WAR、EAR 或其他)并在运行时类路径中包含 Log4j 属性。
【讨论】:
将log4j.properties 放在运行时类路径中。
这个forum 显示了一些关于可能的方法的帖子。
【讨论】:
一般我把它放在一个特殊的文件夹“res”或“resources”中,如前所述,但是对于Web应用程序,我将带有ant任务的log4j.properties复制到WEB-INF/classes目录。它是就像将文件放在 src/ 文件夹的根目录下一样,但通常我更喜欢在专用文件夹中查看它。
对于 Maven,通常的放置位置是在 src/main/resources 文件夹中,正如 other post 中所回答的那样。
那里的所有资源都将转到根类路径中的构建(例如target/classes/)
如果你想要一个强大的记录器,你也可以看看slf4j library,它是一个记录器门面,可以使用后面的 log4j 实现。
【讨论】:
我发现 log4j.properties 文件的位置取决于 Eclipse 项目的类型。
具体来说,对于 Eclipse 动态 Web 项目,涉及将 log4j.properties 添加到 war 文件的大多数答案实际上并未将属性文件添加到正确的位置,尤其是对于 Tomcat/Apache。
这是我的一些研究和我对这个问题的解决方案(再次专门针对在 Tomcat/Apache 6.0 上运行的动态 Web 项目)
请参阅这篇文章,了解 Tomcat 将如何加载类。它不同于 Java 的普通类加载器。 (https://www.mulesoft.com/tcat/tomcat-classpath) 请注意,它只在 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) 再次右键项目,选择'Build-Path'->'Configure Build Path'。选择“来源”选项卡。单击“添加文件夹”按钮。浏览以找到您在上述步骤 (1) 中创建的新文件夹。选择“确定”。
(4) 返回 eclipse Project Explorer 视图后,请注意该文件夹现在已移至“Java Resources”区域(即,由于 eclipse 表示抽象,它不再位于根目录)。
(5) 干净构建您的项目。
(6) 要验证 .properties 文件现在是否存在于您的 war 文件的 WEB-INF/classes 中,请将一个 war 文件导出到一个简单的位置(右键单击项目 -> 导出 -> War 文件)并检查内容.请注意,log4j.properties 文件现在出现在 WEB-INF/classes 中。
(7) 将您的项目推广到 Tomcat/Apache 并注意 log4j 现在可以正常工作。
现在 log4j 工作了,开始记录,解决世界问题,休息一下,享受美味的成人饮料。
【讨论】:
您不希望将 log4j.properties 与您的项目打包一起部署 - 这是一个坏主意,正如其他海报所提到的那样。
找到 Eclipse 在运行应用程序时指向的根 Tomcat 安装,并将 log4j.properties 文件添加到那里的适当位置。对于 Tomcat 7,正确的位置是
${TOMCAT_HOME}/lib
【讨论】:
对于 eclipse 中的普通(非 maven 和非 web)java 项目。
【讨论】: