spring boot .war tomcat 应用程序日志不存在

Posted

技术标签:

【中文标题】spring boot .war tomcat 应用程序日志不存在【英文标题】:spring boot .war tomcat application logs not there 【发布时间】:2019-11-20 12:29:12 【问题描述】:

我正在尝试将我的 webapp 日志写入 tomcat 中 /logs 目录中的 .log 文件,但该文件没有生成,也没有任何日志输出进入控制台,除了 spring 日志和 tomcat 日志。当我使用嵌入的 tomcat 作为 jar 文件运行 spring boot 时,它会很好地写入日志文件,但是一旦我通过 webapps 文件夹部署到 tomcat,应用程序日志就找不到了。

SpringBoot 2.1.2 Java 1.8 Tomcat 8.5

我试过了:

在 setenv.sh 中配置 LOGGING_CONFIG 多个记录器..logback、java utils 等..

application.properties:

logging.file=../logs/my-app.log
logging.level.org.springframework=INFO
logging.level.com.bose=DEBUG

log4j.log4j 的属性:

log4j.rootLogger=$marge.log.level, stdout, file

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=marge.log

#when stdout is also specified it will not write to the file

log4j.appender.file.MaxFileSize=1MB
# Keep one backup file
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%ddd MMM yyyy HH:mm:ss,SSS [%c] [%-5p] %n%m%n

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
# stdout uses PatternLayout
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%dHH:mm:ss,SSS [%c] [%-5p] %n%m%n

# Print only messages of level DEBUG or above in the package com.bose
log4j.logger.com.app=$log.level

预期:当我在 /webapps 中部署我的 webapp 时,应用程序日志(由 log4j 生成)应该在 /logs 目录的 my-app.log 中

实际:没有文件生成,甚至在 stdout/console 中也没有日志

【问题讨论】:

【参考方案1】:

默认情况下,spring boot 使用logback 作为日志绑定器,因此这里的关键概念首先排除logback,然后包含log4j

例子:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
      <exclusion>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-logging</artifactId>
      </exclusion>
    </exclusions>
</dependency>

之后添加 log4j 2 依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
将您的 log4j2.properties 文件添加到 src/main/resources 以位于类路径中

最后注意你用的是什么日志接口这个很重要,上面的配置你应该使用apache日志之类的:

 package com.example;

 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
 import org.springframework.context.ApplicationContext;

  @SpringBootApplication
  public class Application extends SpringBootServletInitializer 

  private static final Logger LOGGER = LogManager.getLogger(Application.class);

  public static void main(String[] args)
    ApplicationContext ctx = SpringApplication.run(Application.class, args);

    LOGGER.info("Info level log message");
    LOGGER.debug("Debug level log message");
    LOGGER.error("Error level log message");
    
  

【讨论】:

以上是关于spring boot .war tomcat 应用程序日志不存在的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot:在 Tomcat 7 上部署 WAR

spring boot项目打成war包部署到tomcat

spring boot项目打包成war并在tomcat上运行的步骤

spring boot项目打包成war并在tomcat上运行的步骤

spring-boot打成war包放入tomcat运行

spring boot war布署tomcat异常处理