在maven测试阶段禁用Log4J日志

Lui*_*ano 17 java logging log4j build maven

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

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

任何提示?

笔记:

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

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

Lui*_*ano 21

正如@artbristol(对问题的评论)所解释的那样,这可以在万无一失配置.它可以在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>
Run Code Online (Sandbox Code Playgroud)

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

log4j.rootLogger=OFF
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我使用了静态记录器方法,将log4j.properties文件放在test/resources /目录中,其中包含rootLogger = OFF行.它被复制到测试的类路径中并被拾取.没有关于没有记录器配置的投诉,也没有记录器输出:) (2认同)

Qwe*_*rky 7

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

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

  • 这也将禁用IDE中的日志记录(它在IntelliJ IDEA中,我想它不会在eclipse中) (3认同)

ami*_*air 5

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

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.5</version>
    <configuration>
        <forkMode>always</forkMode>
        <argLine>-Dlog4j.configuration=</argLine>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

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