当前位置: 首页 > 知识库问答 >
问题:

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

闾丘树
2023-03-14

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

目前,我有一个类,实现应用环境准备事件,我将它注册为监听器在主函数的SpringBootApplication

应用爪哇:

@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--");
    }
}

初始化Logger.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());
    }
}

问题是,每当我通过Intellij的SpringBoot运行程序或命令行作为胖罐子运行应用程序时,它都运行良好,但是当我将其部署到外部Tomcat时,这些日志不会显示出来(所有其他应用程序日志都运行良好)。

我该怎么做?

共有1个答案

潘弘扬
2023-03-14

我该怎么做?

重写SpringBootServletilizer。配置,类似于:

@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;
    }
}

>

  • 类SpringBootServletilizer

    要配置应用程序,请重写configure(SpringApplicationBuilder)方法(…)

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

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

  •  类似资料:
    • 它永远不会结束,应用程序也不会响应: 我已经检查了以下几点: 我的应用程序扩展了SpringBootServletInitializer 我将初学者tomcat依赖项放在提供的中 war名为“EdgeCustomerOfferStorageWeb.war”,实例端口为10080,因此我使用:http://server:10080/EdgeCustomerOfferStorageWeb/It不响应,

    • 更新:我添加了一个logback-spring.xml,它在嵌入式tomcat上运行良好,但在外部tomcat上就不行了(它不创建文件)

    • 我的程序编译了所有内容,我没有出错,但我实际上期望tomcat应该永久在端口8080上。输出中也没有Spring。在另一个项目中,我做的一切都很好。谢谢你帮助我。 我的父母: 我的tarter.class: 我的Starter-Pom: 控制台输出: 然后什么都不会发生了。谢谢你的帮助。

    • 完成干净的构建后,我将war文件复制到Tomcat的文件夹中。但是部署会发生两次,并且在上下文已经存在的情况下以异常结束。我错过了什么? 非常感谢您的帮助。

    • 我正在尝试在我的Spring Boot应用程序启动之前记录一些东西。下面是一个片段。我正在使用Lombok和Log4J2,并且已经完成了spring-boot-starter-logging排除+添加了spring-boot-starter-log4j2。我想知道如何让它工作,为什么现在的代码不能工作。 更新: 但是,如下所示,使用带有默认日志的Slf4j可以工作,为什么不使用Log4J2呢?(带

    • 14:10:16.944[reactor-http-nio-1]调试org.springframework.http.codec.json.jackson2jsondecoder-[4EF27D66]解码[响应(data=hello)] 14:10:16.944[reactor-http-nio-1]调试reactor.netty.resources.pooledconnectionprovide