spring boot .war tomcat 应用程序日志不存在
spring boot .war tomcat application logs not there
我正在尝试将我的 webapp 日志写入 tomcat 的 /logs 目录中的 .log 文件,但该文件未生成,也没有任何日志输出到 [=] 以外的控制台45=] 日志和 tomcat 日志。当我 运行 spring 作为带有嵌入式 tomcat 的 jar 文件启动时,它会很好地写入日志文件,但是一旦我通过 webapps 文件夹部署到 tomcat找不到应用程序日志。
SpringBoot 2.1.2
Java 1.8
Tomcat 8.5
我试过:
- 在 setenv.sh
中配置 LOGGING_CONFIG
- 多个记录器.. logback,java 实用程序等..
application.properties:
logging.file=../logs/my-app.log
logging.level.org.springframework=INFO
logging.level.com.bose=DEBUG
log4j.properties 对于 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
中没有生成文件,甚至没有日志
默认spring boot使用logback
作为logging binder,所以这里的关键概念先排除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");
}
}
我正在尝试将我的 webapp 日志写入 tomcat 的 /logs 目录中的 .log 文件,但该文件未生成,也没有任何日志输出到 [=] 以外的控制台45=] 日志和 tomcat 日志。当我 运行 spring 作为带有嵌入式 tomcat 的 jar 文件启动时,它会很好地写入日志文件,但是一旦我通过 webapps 文件夹部署到 tomcat找不到应用程序日志。
SpringBoot 2.1.2
Java 1.8
Tomcat 8.5
我试过:
- 在 setenv.sh 中配置 LOGGING_CONFIG
- 多个记录器.. logback,java 实用程序等..
application.properties:
logging.file=../logs/my-app.log
logging.level.org.springframework=INFO
logging.level.com.bose=DEBUG
log4j.properties 对于 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
中没有生成文件,甚至没有日志默认spring boot使用logback
作为logging binder,所以这里的关键概念先排除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"); } }