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上运行的步骤