在Eclipse项目中,Log4j.properties的正确位置是什么?

62

在我的 Eclipse 项目中,我应该将 log4j.properties 文件添加到哪个位置才能使它按照预期工作?


1
你的问题太过模糊。通常它会被添加到类路径中。右键单击项目,选择构建路径。 - adarshr
11个回答

88
您可以将log4j.properties文件添加到任何位置,当您运行项目时,通过点击以下选项进行配置并添加文件的位置: Run->Run Configuration -> [classpath tab] -> 点击用户条目 -> 高级 -> 选择添加文件夹 -> 选择您的log4j.properties文件的位置, 然后 -> OK -> 运行, 这样就可以加载文件了。

4
如果我的项目是一个库,我把log4j.properties放在源代码根目录下,那么使用log4j的我的库用户也许会捕获到这个log4j.properties文件,可能会覆盖他们的文件,或者至少会引起混淆。 - Jaime Hablutzel
1
@jaime 我也遇到了同样的问题,我的项目使用了我自己的两个库,每个库和主项目都在源根目录下有log4j.properties文件。现在当我运行主项目时,它从其中一个库中获取了错误的log4j.properties文件。怎么才能最好地解决这个问题呢? - Dimitry K
@JaimeHablutzel 通常情况下,你不应该将log4j属性捆绑在你的库中。你的库的用户应该提供他们自己的日志配置。理想情况下,我会建议你给你的用户一种注入他们喜欢的日志策略的方法,并且你的日志记录针对一个接口编写。这不仅仅是log4j配置文件,它可能是整个日志记录器实现等。 - Charbel
我最终将log4j.properties引用放在了位于/org/example/mylibrary/log4j.properties的库中。这样一来,我的库用户就不会自动捕获它,但是如果他们的JVM配置了-Dlog4j.configuration=...,或者至少可以作为他们自己的log4j.properties的参考,仍然可以使用它。 - Jaime Hablutzel

36

在我看来,最安全的方法是在运行/调试配置中指向该文件。

-Dlog4j.configuration=file:mylogging.properties

注意:使用Eclipse启动配置时,必须指定file:协议。

这样记录器将无法捕获类路径中先前出现的任何logging.properties或JDK中的默认日志记录属性。

此外,请考虑实际使用log4j.xml,它具有更丰富的表达式语法,并允许更多内容(log4j.xml优先于log4j.properties)。


11
更像是-Dlog4j.configuration="file:path/to/log4j.properties"。 - Basemasta

12

将log4j.properties文件添加到项目的运行时类路径中。 有些人会将其添加到源代码树的根目录下(这样它会被复制到编译后的类的根目录)。

编辑: 如果您的项目是Maven项目, 您可以将log4j.properties放在src/main/resources文件夹中(并且src/test/resources用于单元测试)。

如果您有多个环境(例如开发和生产环境), 需要为每个环境设置不同的日志记录, 并且希望将相同的jar(或war或ear)文件部署到每个环境中 (例如一个构建适用于所有环境), 那么请将log4j.properties文件存储在jar文件之外,并将其放置在每个环境的类路径中(可以通过环境进行配置)。 历史上,我会在类路径中包含一些已知的目录,并在那里部署特定于环境的内容。 例如, ~tomcat_user/localclasspath,其中~tomcat_user是将运行我的war文件的tomcat实例的用户的主目录。


3
如果类路径中的一个jar包中包含自己的log4j.properties,请注意。 - Alain Pannetier
@AlainPannetier 我想知道如何解决这个问题?因为据我所知,如果我将log4j.properties放在类路径上,它会自动包含到src/根目录中? - Dimitry K
是的,这就是为什么我说“...将其添加到源树的根目录下...” - DwB
你能帮我解答一个相关的问题吗?- https://stackoverflow.com/questions/23278607/using-simple-log4j-properties-in-my-java-code - Erran Morad

10

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

在动态Web项目自动创建的Java资源文件夹上,右键单击并添加一个新的源文件夹,并将其命名为“resources”。然后,这里的文件将被导出到war文件的classes目录中。


请问你能帮我解决一个相关的问题吗 - https://stackoverflow.com/questions/23278607/using-simple-log4j-properties-in-my-java-code - Erran Morad

9
如果你有一个库并且想要附加log4j:
  1. 在你的项目中创建一个名为“resources”的文件夹。
  2. 创建一个名为log4j的.properties文件。
  3. 在log4j.properties文件中设置属性。
  4. 在项目上右键单击,然后转到“属性”->“Java Build Path”,最后转到“源”选项卡。
  5. 点击添加文件夹,并搜索步骤1中创建的“resources”文件夹。
  6. 完成。
(我假设您已经添加了log4j库。)
注:抱歉我的英语不好。

5
这个问题已经在这里得到了解答。
类路径不包括特定的文件,只包括目录和jar文件。所以,将该文件放在一个在你的classpath中的目录中。 Log4j属性通常不用于开发应用程序(除非你正在调试Eclipse本身!)。所以你真正想要的是构建可执行的Java应用程序(应用程序、WAR、EAR或其他),并将Log4j属性包含在运行时类路径中。

你能帮我解答一个相关的问题吗?- https://stackoverflow.com/questions/23278607/using-simple-log4j-properties-in-my-java-code - Erran Morad

3

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

这个论坛展示了一些关于可能的方法。


你能帮我解答一个相关问题吗 - https://stackoverflow.com/questions/23278607/using-simple-log4j-properties-in-my-java-code - Erran Morad

1
通常我会将它放在一个特殊的文件夹"res"或"resources"中,但对于Web应用程序,我会使用ant任务将log4j.properties复制到WEB-INF/classes目录中。这与让文件位于src/文件夹的根目录相同,但通常我更喜欢将其放在一个专用文件夹中。
使用Maven时,通常将其放置在文件夹src/main/resources中,如其他帖子所述。所有资源都将进入您的构建根类路径(例如target/classes/)。
如果您想要一个强大的记录器,您也可以看看slf4j库,它是一个记录器门面,可以在后台使用log4j实现。

1
我发现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) 在项目资源管理器中右键单击您的项目,选择“新建”->“文件夹”。您可以将文件夹命名为任何名称,但在此情况下的标准名称是“resources”。新文件夹应出现在您的项目根目录中。

(2) 将log4j.properties文件移动到这个新文件夹中。

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

(4) 回到Eclipse项目资源管理器视图后,请注意该文件夹现已移至“Java资源”区域(即由于Eclipse演示抽象而不再位于根目录)。

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

(6) 为了验证.properties文件现在存在于您的war文件的WEB-INF / classes中,请将war文件导出到易于访问的位置(右键单击项目 - >导出 - >War文件),并检查其内容。请注意,log4j.properties文件现在出现在WEB-INF / classes中。

(7) 将您的项目推广到Tomcat / Apache,并注意log4j现在正在运行。

现在log4j已经可用,开始记录日志,解决世界问题,休息一下,享受美味的成人饮料。

1

您不希望将log4j.properties与您的项目部署包一起打包--这是一个坏主意,正如其他发帖者所提到的。

找到Eclipse运行您的应用程序时指向的根Tomcat安装位置,并在那里的正确位置添加log4j.properties文件。对于Tomcat 7,正确的位置是

${TOMCAT_HOME}/lib


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接