每当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时,这些日志不会显示出来(所有其他应用程序日志都运行良好)。
我该怎么做?
我该怎么做?
重写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;
}
}
>
要配置应用程序,请重写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