【问题标题】:spring boot .war tomcat application logs not therespring boot .war tomcat 应用程序日志不存在
【发布时间】: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=%d{dd 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=%d{HH: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 中也没有日志

【问题讨论】:

    标签: java spring-boot logging war


    【解决方案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");
          }
        }
      

    【讨论】:

      猜你喜欢
      • 2016-05-30
      • 2020-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      • 2014-06-29
      • 1970-01-01
      相关资源
      最近更新 更多