在Tomcat上部署多个Spring Boot应用程序时如何指定logging.config

时间:2019-03-06 20:57:35

标签: spring spring-boot tomcat logging log4j2

我有多个打包为war文件的spring boot应用程序(X,Y,Z)打包在我的雄猫上。我想将log4j2用作应用程序的日志记录系统。因此,要更改X的日志记录系统,我要在tomcat中将Sping Boot Propery的'logging.config'值设置为指向/tomcat/apps/X/WEB-INF/classes/log4j2-spring.properties。通过执行此记录,对于X可以正常工作。

闪回: 如果在application.properties中指定 logging.config = classpath:log4j2.properties ,那么当我们在Eclipse中以Java Application身份运行时,日志记录将起作用。但是,当我们将其作为WAR文件部署在tomcat上时,日志记录不起作用。 为了使其正常工作,我不得不将logging.config = {Path-to-myapp} /log4j2.properties放入tomcat / bin / setenv.bat中。

我的问题是,如果我有多个应用程序,那么如何为每个Spring Boot应用程序设置logging.config。

  

由于在创建ApplicationContext之前已初始化日志记录,   在Spring中无法通过@PropertySources控制日志记录   @配置文件。更改日志记录系统或   完全通过系统属性将其禁用。

2 个答案:

答案 0 :(得分:1)

我已重命名了application.properties并通过进行以下更改来设置log4j配置:

public class MyApplication extends SpringBootServletInitializer {

public static void main(String[] args) {
    new SpringApplicationBuilder(MyApplication.class)
    .properties("spring.config.name:new-app-properties-name")
    .build()
    .run(args);
}

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(MyApplication.class).properties("spring.config.name: new-app-properties-name");
}

/**
 * Set log4j2.xml location
 */
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
    servletContext.setInitParameter("logging.config", "/my-app/config/log4j2.xml");
    super.onStartup(servletContext);
}
}

答案 1 :(得分:0)

我遇到了类似的问题,在这种情况下,我进行了以下更改:

  • 像您一样从应用程序中扩展log4j2.properties文件,提到.env文件中文件的外部位置(在本例中为tomcat的.bat文件中)。每个spring boot都仅引用此文件。
  • 在该log4j2.properties文件中,我们为每个服务创建了单独的附加程序和记录器,并对其进行了配置。

这不是确切的解决方案,但在某些方面起作用。

对于每个服务,如果要执行此操作,则意味着必须创建每个文件和位置以及所有文件……并且在特定点后无法管理。

如之前的评论中所述,需要某种机制来以有条理和结构化的方式处理这种情况。