设置log4j日志级别

时间:2012-05-17 23:09:37

标签: java logging log4j

我目前正在开发一个使用log4j的项目。 我正在运行一个测试用例(junit),并希望将日志级别设置为跟踪,以便我可以查看所有值是否正确。在项目中使用日志记录的类包含如下所示的行:

private static final Log LOG = LogFactory.getLog(MatchTaskTest.class);

并使用类似这样的方法进行实际调试

LOG.trace("value");

我之前从未使用过log4j,有没有人知道如何只为测试用例更改日志级别,最好只需在eclipse的运行配置对话框中定义一个参数。

7 个答案:

答案 0 :(得分:20)

在你的junit课程中:

Logger.getRootLogger().setLevel(Level.TRACE);

在执行测试方法之前的某个地方。它会将根记录器的阈值级别设置为TRACE。

答案 1 :(得分:19)

使用其他配置文件

也许你可以指向另一个配置文件。

java -Dlog4j.configuration=config file yourApp

其中:

  • config,您的配置文件,例如log4j.propertieslog4j.xml
  • file,日志文件,例如myApp.log
  • yourApp,你是app,例如MyAppGUI

或者您可以使用课程

java -Dlog4j.configurationClass=config class yourApp

其中:

  • config,您的配置文件,例如log4j.propertieslog4j.xml
  • class,任何自定义的初始化类,如LogManager,都应该实现 org.apache.log4j.spi.Configurator
  • yourApp,你是app,例如MyAppGUI

您可以在默认初始化过程部分的Apache log4j 1.2 - Short introduction to log4j中查看更多内容。

以编程方式修改级别

此外,您还可以使用提供Logger类的方法,例如public void setLevel(Level level),例如:

Logger.getRootLogger().setLevel(Level.TRACE);

由于您只想进行测试,因此可以使用它们。但建议不要在客户端代码中使用,因为它们会覆盖硬编码中的默认配置参数。最好的方法是使用外部配置文件。

答案 2 :(得分:2)

如果您使用的是Maven,则可以有两个log4j配置文件:

  • src / main / resources中的一个,包含您的生产日志配置
  • src / test / resources中的一个,包含您的测试时记录配置

Maven将在测试时自动使用后者,并将前者捆绑到您的工件(JAR,WAR等)中,以便在生产中使用它。您不必乱用命令行开关或任何东西。

答案 3 :(得分:0)

我认为这不可能。

配置文件将允许您配置日志中实际显示的日志消息,而不是每条消息的记录级别。这是有道理的 - 配置不应该影响消息的级别。

javadoc有一个针对每个日志级别的方法和一个通用的日志方法,它采用优先级,所以我不确定是否有默认设置。

您可以通过-Dlog4j.configuration=<FILE_PATH>在命令行中明确设置配置文件,这样您就可以为该测试用例设置特定的配置。

答案 4 :(得分:0)

我不知道为什么以上某些内容对我不起作用。 (我不想写配置文件)。以下为我工作

OR

答案 5 :(得分:0)

注意,log4j2.properties文件可能包含该行

filter.threshold.level = debug

您可能会浪费整个下午来试图弄清楚为什么LOG.trace()语句没有输出任何内容!

答案 6 :(得分:-2)

我实际上把它放在了@Before方法中。但我相信它可以(而且应该)放在@BeforeClass中。

如果在类体中设置它,则会出现编译错误。