Java 在外部Tomcat上启动应用程序之前的Spring引导日志记录

Java 在外部Tomcat上启动应用程序之前的Spring引导日志记录,java,spring,spring-boot,log4j2,Java,Spring,Spring Boot,Log4j2,每当Spring Boot应用程序即将启动时,我都会尝试做一些日志记录 目前,我有一个实现ApplicationEnvironmentPreparedEvent的类,我正在SpringBootApplication的主函数中将其注册为侦听器 Application.java: @SpringBootApplication public class Application extends SpringBootServletInitializer { private static final

每当Spring Boot应用程序即将启动时,我都会尝试做一些日志记录

目前,我有一个实现
ApplicationEnvironmentPreparedEvent
的类,我正在
SpringBootApplication
的主函数中将其注册为侦听器

Application.java:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {
    private static final Logger appLogger = LoggerFactory.getLogger(Application.class);
    public static void main(String[] args) {
        System.out.println("INIT");
        appLogger.info("Initializing");

        SpringApplication sa = new SpringApplication();
        sa.addListeners(new InitializationLogger());
        sa.setSources(new HashSet<>(Collections.singletonList(Application.class)));
        sa.run(args);

        appLogger.info("--Application Started--");
    }
}
@springboot应用程序
公共类应用程序扩展了SpringBootServletInitializer{
私有静态最终记录器appLogger=LoggerFactory.getLogger(Application.class);
公共静态void main(字符串[]args){
System.out.println(“INIT”);
appLogger.info(“初始化”);
SpringApplication sa=新的SpringApplication();
addListeners(新的InitializationLogger());
setSources(新的HashSet(Collections.singletonList(Application.class));
sa.run(args);
appLogger.info(“--应用程序已启动--”);
}
}
InitializationLogger.java

public class InitializationLogger implements ApplicationListener<ApplicationEnvironmentPreparedEvent> {
    private static final Logger appLogger = LoggerFactory.getLogger(InitializationLogger.class);

    @Override
    public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
        System.out.println(event.getClass());
        appLogger.info(this.getClass().getName());
    }
}
公共类初始化记录器实现ApplicationListener{
私有静态最终记录器appLogger=LoggerFactory.getLogger(InitializationLogger.class);
@凌驾
ApplicationEvent上的公共无效(ApplicationEnvironmentPreparedEvent事件){
System.out.println(event.getClass());
appLogger.info(this.getClass().getName());
}
}
问题是,每当我通过Intellij的SpringBoot runner或作为胖jar的命令行运行应用程序时,它都可以正常工作,但当我将其部署到外部Tomcat时,这些日志不会显示(所有其他应用程序日志都可以正常工作)

我该怎么做

我该怎么做

覆盖,类似于:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {
    private static final Logger appLogger = LoggerFactory.getLogger(Application.class);

    // for JAR deploy:
    public static void main(String[] args) {
        SpringApplicationBuilder builder = configureSpringBuilder(new SpringApplicationBuilder());
        builder.application().run(args);
        appLogger.info("--Application Started--");
    }

    // for WAR deploy:
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return super.configure(configureSpringBuilder(builder));
    }

    // Common:
    private static SpringApplicationBuilder configureSpringBuilder(SpringApplicationBuilder builder) {
        System.out.println("INIT");
        appLogger.info("Initializing");

        builder.application().addListeners(new InitializationLogger());
        builder.application().setSources(new HashSet<>(Collections.singletonList(Application.class)));

        return builder;
    }
}
@springboot应用程序
公共类应用程序扩展了SpringBootServletInitializer{
私有静态最终记录器appLogger=LoggerFactory.getLogger(Application.class);
//对于JAR部署:
公共静态void main(字符串[]args){
SpringApplicationBuilder=配置SpringBuilder(新的SpringApplicationBuilder());
builder.application().run(args);
appLogger.info(“--应用程序已启动--”);
}
//战争部署:
@凌驾
受保护的SpringApplicationBuilder配置(SpringApplicationBuilder){
返回super.configure(configureSpringBuilder(builder));
}
//常见的:
私有静态SpringApplicationBuilder配置SpringBuilder(SpringApplicationBuilder){
System.out.println(“INIT”);
appLogger.info(“初始化”);
builder.application().addListeners(新的InitializationLogger());
builder.application().setSources(新的HashSet(Collections.singletonList(application.class));
返回生成器;
}
}
参考资料:
  • 要配置应用程序,请重写configure(SpringApplicationBuilder)方法(…)

  • 为了将应用程序设置为servlet,我们使用SpringBootServletInitializer扩展了主类,并使用SpringApplicationBuilder覆盖configure方法

  • 因此修改应用程序入口点类(…)


  • 你查过tomcat日志了吗?@PrabinPaudel是的,那里也没有日志