21

在 IDE 中进行开发时,跟踪和调试日志可能会有所帮助,但在构建过程中,我发现这些行非常令人不安,并且混淆了 maven 或其他构建工具打印的报告。

让 log4j 尊重像-Dlog4j.rootLogger=OFF1这样的系统属性以与 maven 或不需要更改项目文件的东西一起使用会很好。我知道我可以指定-Dlog4j.configuration=alternateconfig.props 2但我在这里询问是否有人找到了一种更智能的方法来在构建过程中以最少的人工干预来禁用日志记录。即一些java类检测maven作为禁用log4j的调用者,或其他智能解决方案。

有什么提示吗?

笔记:

[1]:已经试过了,还是不行。

[2]:这很好,但它似乎不适用于 maven(也许肯定会跳过它)

4

3 回答 3

27

正如@artbristol(对问题的评论)所解释的,这可以在surefire中进行配置。在 pom.xml 中可以这样实现:

        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <forkMode>always</forkMode>
                <systemPropertyVariables>
                    <log4j.configuration>file:${basedir}/etc/log4j-silent.properties</log4j.configuration>
                </systemPropertyVariables>
            </configuration>
        </plugin>

然后,让文件${basedir}/etc/log4j-silent.properties具有以下设置就可以了:

log4j.rootLogger=OFF

log4j 在 maven 中的测试运行期间被完全禁用,并且在 IDE 中一切正常。

更好的解决方案是没有额外的配置文件;但到目前为止找不到它。

于 2012-12-18T16:33:27.543 回答
8

指定一个没有附加程序的测试 log4j 配置文件。

例如,如果您有一个 log4j.properties src/main/resources,则将其复制到src/test/resouces并删除附加程序或将日志级别设置为致命。

于 2012-12-18T15:21:03.513 回答
5

根据之前的答案,我使用:

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.5</version>
    <configuration>
        <forkMode>always</forkMode>
        <argLine>-Dlog4j.configuration=</argLine>
    </configuration>
</plugin>

Maven 输出显示有关 log4j 未初始化的警告,但除此之外它似乎可以工作。

于 2013-01-17T17:52:26.757 回答