如何在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中的块没有被执行,我特别想打印版本。

注意:这是在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:不必在横幅之后,但必须足够早,以便在自定义代码的任何验证/错误之前打印。

假设您正在对一个罐子进行胖包装(否则需要进行一些修改)

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

然后自定义您的banner.txt;例如

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

您可以使用spring.banner.location属性的自定义banner.txt,并使用processResources任务的Gradle资源筛选将此文件中的占位符替换为build-info使用的相同属性。

这个答案包含一些关于技巧的内容,但是可能是有用的。

假设第一:

  1. 您正在构建一个可执行的胖Jar
  2. 您正在使用spring-boot-maven插件来构建jar

答案:

  1. 配置spring-boot-maven插件以在工件中包含构建信息。有关说明,请参阅第91.1节生成生成信息(在弹簧引导参考中)
  2. 请确保启用生成信息贡献者。这应该在默认情况下启用(在spring-boot引用中搜索"management.info.build.enabled"以找到启用他的信息贡献者的属性
  3. 从应用程序上下文中获取InfoContributorbean的列表。我通过在组件中自动布线List来完成此操作,如下所示:

    @Autowired
    私有列表<InfoContributor>infoContributorList;

  4. 运行InfoContributor对象列表(在您的情况下应该只有一个,即构建信息)并显示信息

这里有一些代码(我的配置不好)

最终信息
final Info.Builder infoBuilder=新Info.Builders()
最终地图infoMap;

for(最终InfoContributor current:infoContributorList)

current.convent(infoBuilder);

info=infoBuilder.build();

infoMap=info.getDetails();

最新更新