Maven CXF插件日志记录

时间:2019-04-25 15:04:35

标签: cxf maven-plugin

我正在使用Apache cxf maven插件(v3.3.0)成功生成Java包装程序。

但是,maven构建的输出包含来自 wsdl2java 的数千条DEBUG日志记录行,但我无法删除它们。是否有额外参数或其他方法可以使过程静音,以便我仅收到成功(或可能失败)的消息?

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>${cxf.version}</version>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
                <sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot>
                <defaultOptions>
                    <autoNameResolution>true</autoNameResolution>
                </defaultOptions>
                <wsdlOptions>
                    <!--Some Web Service -->
                    <wsdlOption>
                        <wsdl>https://some/web/service.wsdl</wsdl>
                        <extraargs>
                            <extraarg>-client</extraarg>
                            <extraarg>-quiet</extraarg>
                            <extraarg>-p</extraarg>
                            <extraarg>com.foo.bar</extraarg>
                        </extraargs>
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>
</plugin>

2 个答案:

答案 0 :(得分:3)

看来,在Java 9+中,该插件会强制在派生的JVM中生成代码,而不管默认文档记录为false还是此选项的任何显式配置都是如此。插件执行未从项目中看到任何日志记录配置。 CXF正在使用java.util.logging进行日志记录,任何级别为FINER的日志都将打印到控制台。

我通过使用插件的additionalJvmArgs配置选项为派生的JVM提供了日志记录配置文件的显式路径来解决此问题:

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>${cxf-plugin.version}</version>
    <configuration>
        <additionalJvmArgs>-Dlogback.configurationFile=${project.basedir}/src/test/resources/logback-codegen.xml</additionalJvmArgs>
    </configuration>
</plugin>

Logback的系统属性(如本例所示)为logback.configurationFile。对于Log4j,它将为log4j.configurationFile

在日志记录配置文件中,可以添加以下记录器(Logback):

<!-- entries below silence excessive logging from cxf-codegen-plugin -->
<logger name="org.apache.cxf" level="info"/>
<logger name="org.apache.velocity" level="info"/>

通过这种方式,插件执行仍将所有警告和错误打印到控制台,但是所有重复的调试信息都消失了。缺点是您需要在每个项目中都看到这样的日志记录配置文件。但是,无论如何,您可能应该拥有一个。经常可以使用与(单元)测试相同的测试。

答案 1 :(得分:2)

很抱歉没有进入根解决方案,而是在我的依赖项帮助中添加了它:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
    <scope>provided</scope>
</dependency>

或在插件执行中添加以下内容也有帮助,除了速度日志

<additionalJvmArgs>
    -Dorg.apache.cxf.Logger=null
</additionalJvmArgs>

希望这会给有人提供一个非常合适的解决方案的提示。

相关问题