在maven测试阶段禁用Log4J日志

时间:2012-12-18 15:02:51

标签: java maven logging build log4j

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

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

任何提示?

注意:

[1]:已经尝试过,但它不起作用。

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

3 个答案:

答案 0 :(得分:18)

正如@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

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

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

答案 1 :(得分:7)

指定不带appender的测试log4j配置文件。

例如,如果src/main/resources中有log4j.properties,则将其复制到src/test/resouces,然后删除appender或将日志级别设置为致命。

答案 2 :(得分:2)

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

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

Maven输出显示有关log4j未被初始化的警告,但除此之外似乎有效。