java - 如何在 Spring Boot 的日志中尽早打印应用程序版本?

标签 java spring-boot

我试图在我的任何其他代码有机会执行之前在日志中尽早打印我的应用程序版本,这样如果发生错误,该版本就会包含在日志文件中。

@SpringBootApplication
public class Application {
    public static void main( String... args ) {
        var ctx = SpringApplication.run( Application.class, args );
        ctx.getBeanProvider( BuildProperties.class ).ifAvailable( bp -> {
            LogManager.getLogger( Application.class ).info( bp.getArtifact() );
        } );
    }
}

但是 ifAvailable 中的 block 没有执行,我想特别打印版本。

注意:这是在 build.gradle.kts

springBoot {
    buildInfo() // generates BOOT-INF/classes/META-INF/build-info.properties
}

更新 失败,没有这样的 bean...

@SpringBootApplication
public class Application {
    public static void main( String... args ) {
        SpringApplication.run( Application.class, args );
    }

    @Bean
    CommandLineRunner runner( BuildProperties bp ) {
        return args -> LogManager.getLogger( Application.class ).info( bp.getArtifact() );
    }
}

更新 2: 不必在横幅之后,但必须足够早,以便它在自定义代码的任何验证/错误之前打印。

最佳答案

假设你正在装一个 jar (否则需要做一些修改)

tasks.withType<BootJar>().configureEach {
    enabled = true
    manifest {
        attributes(
            "Implementation-Title" to project.description,
            "Implementation-Version" to project.version
        )
    }
}

然后 customize your banner.txt ;例如

${application.title} ${application.version}

关于java - 如何在 Spring Boot 的日志中尽早打印应用程序版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54083990/

相关文章:

java - 评估代码,区分负数和负数?

java - 意外的实例方法函数...在未绑定(bind)查找中找到

java - 如何使三角函数代码更高效

spring - Spring MVC 中的模拟服务

java - 一个非常简单的应用程序的 Spring 启动异常

java - 表加载期间数据库的性能

java - as 运算符用于执行兼容类型之间的转换

spring-boot - 如何使用 Spring WebClient get 从端点接收 Map<String, Integer>?

java - 访问应用程序特定的 url 时,Spring security oauth 中出现 403 错误(access_token 有效且 csrf 已禁用)

spring - 未找到多部分边界