控制器映射在启动时未记录

Posted

技术标签:

【中文标题】控制器映射在启动时未记录【英文标题】:Controller mapping are not logging at startup 【发布时间】:2019-04-19 01:12:51 【问题描述】:

我需要将在 jdk 8 上运行的现有代码升级到 jdk 11 升级后控制器映射在启动期间未显示。在此应用程序中,我们定义了一些用于集成的入站网关,我们有还定义了一些休息控制器,它们在 jdk 1.8 上时会记录日志,但在我升级后它们没有被记录。有什么方法可以打印这些日志。我们使用的是spring boot 2.1.0 Release,jdk 11 spring集成。第一个图像是在 jdk 8 上运行的代码,第二个图像是在 jdk 11 上运行的代码。这是我们正在使用的 pomfile http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0

<groupId>com.oms.integration</groupId>
<artifactId>oms-integration</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>oms-integration</name>
<description>Integration between OMS and other systems</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.0.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>11</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-integration</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.integration</groupId>
        <artifactId>spring-integration-http</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.integration</groupId>
        <artifactId>spring-integration-xml</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>xmlunit</groupId>
        <artifactId>xmlunit</artifactId>
        <version>1.5</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <release>$java.version</release>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.ow2.asm</groupId>
                    <artifactId>asm</artifactId>
                    <version>6.2</version>
                </dependency>
            </dependencies>
        </plugin>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

【问题讨论】:

API 可以访问吗? 请问它在 JDK 1.8 上看起来如何?您的插入记录为格式化代码也会很棒。谢谢 API 是可访问的,唯一的问题是它们在启动时没有记录。这是在 jdk1.8 中运行的先前版本启动日志的屏幕截图。我在 8090 端口运行之前版本的代码。 你是只升级JDK还是Spring Boot版本?如果没有失败,您展示的内容就没有多大意义 是的,我们确实将 spring boot 2.0.4.RELEASE 升级到了 2.1.0.RELEASE 【参考方案1】:

如果您还升级了 Spring Boot,这意味着您的项目中的所有其他依赖项也是如此,那么您无法将苹果与苹果进行比较,因为它已经不仅仅是 Java 切换。

从 5.1 版开始,Spring Framework 似乎不会在 INFO 下记录这些端点。考虑为 org.springframework.web 类别配置 DEBUG,然后您将再次使用它们。

您的问题是您没有与我们分享有关依赖项版本不匹配的重要信息...

更新

抱歉,必须是TRACE。这是来自AbstractHandlerMethodMapping 的一段相关代码:

if (logger.isTraceEnabled()) 
            logger.trace("Mapped " + methods.size() + " handler method(s) for " + userType + ": " + methods);
        

【讨论】:

我已经用我们正在使用的最新 pomfile 更新了我的帖子,我是否需要在我的属性文件 org.springframework.web=DEBUG 中指定这个属性。当我指定我得到未知属性时 @Sid logging.level.= 其中 level 是 TRACE、DEBUG、INFO、WARN、ERROR、FATAL 或 OFF 之一。可以使用 logging.level.root 配置根记录器。 docs.spring.io/spring-boot/docs/current/reference/html/… 我已经添加了这个配置但是我仍然没有看到任何映射日志 spring.profiles.active=dev server.port=8080 logging.level.org.springframework.web=DEBUG 在我的回答中查看更新。现在一定是TRACE @ArtemBilan 这让我发疯了。谢谢你。 FWIW:什么对我有用:logging.level.org.springframework.web.servlet.mvc.method.annotation=TRACE

以上是关于控制器映射在启动时未记录的主要内容,如果未能解决你的问题,请参考以下文章

添加控制器时未找到 nunit 框架错误

服务中的方法在执行时未定义,但在登录到控制台时未定义

iOS 5:第一次加载控制器时未调用 willRotateToInterfaceOrientation:duration

使用调用控制器的路由时未识别的控制器

点击 UITabBar 时未调用子视图控制器的 viewDidDisappear

AngularJS:使用ngRoute路由时未加载组件控制器