Maven cxf 插件日志记录

Maven cxf plugin logging

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

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

<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>

抱歉没有进入根解决方案,但在我的依赖项中添加这个帮助:

<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>

希望这能给某人一些提示,以提出更合适的解决方案。

似乎在 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"/>

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