设置log4j日志级别
我目前正在开发一个使用log4j的项目。 我正在运行一个测试用例(junit),并希望将日志级别设置为跟踪,以便我可以看到所有值是否正确。 在项目中使用日志记录的类包含如下所示的行:
private static final Log LOG = LogFactory.getLog(MatchTaskTest.class);
并使用像这样的方式来进行实际的调试
LOG.trace("value");
我之前从未使用过log4j,有没有人知道如何只为测试用例更改日志级别,最好只需在eclipse的运行配置对话框中定义一个参数。
使用其他配置文件
也许你可以指向另一个配置文件。
java -Dlog4j.configuration=config file yourApp
哪里:
-
config
,配置文件,例如log4j.properties
或log4j.xml
。 -
file
,日志文件,例如myApp.log
-
yourApp
,你的app,例如MyAppGUI
或者你可以使用一个class级
java -Dlog4j.configurationClass=config class yourApp
哪里:
-
config
,配置文件,例如log4j.properties
或log4j.xml
。 -
class
,任何自定义的初始化类,如LogManager
,都应该实现org.apache.log4j.spi.Configurator
-
yourApp
,你的app,例如MyAppGUI
您可以在Apache log4j 1.2中看到更多内容-对默认初始化过程部分的log4j简介 。
以编程方式修改级别
此外,您还可以使用提供Logger
类的方法,例如public void setLevel(Level level)
,例如:
Logger.getRootLogger().setLevel(Level.TRACE);
由于您只想进行测试,因此可以使用它们。 但建议不要在客户端代码中使用,因为它们会覆盖硬编码中的默认配置参数。 最好的方法是使用外部配置文件。
在你的junit类中放:
Logger.getRootLogger().setLevel(Level.TRACE);
在执行测试方法之前的某个地方。 它会将根记录器的阈值级别设置为TRACE。
如果您使用的是Maven,则可以使用两个log4j配置文件:
- src / main / resources中的一个,包含您的生产日志配置
- src / test / resources中的一个,包含您的测试时记录配置
Maven将在测试时自动使用后者,并将前者捆绑到您的工件(JAR,WAR等)中,以便在生产中使用它。 您不必乱用命令行开关或任何东西。
我不认为这是可能的。
配置文件将允许您配置日志中实际显示的日志消息,而不是每条消息的记录级别。 这是有道理的 – 配置不应该影响消息的级别。
javadoc有一个用于每个日志级别的方法和一个通用的日志方法,它具有优先级,因此我不确定是否存在默认设置。
您可以通过-Dlog4j.configuration=
在命令行中-Dlog4j.configuration=
设置配置文件,这样您就可以为该测试用例设置特定的配置。
我不知道为什么上面的一些对我不起作用。 (我不想写配置文件)。 以下为我工作
Logger log1 = Deencapsulation.getField(Some.class,"logger"); log1.setLevel(Level.DEBUG);
我实际上把它放在了@Before方法中。 但我相信它可以(而且应该)放在@BeforeClass中。
如果在类体中设置它,则会出现编译器错误。