使用外部 Tomcat 进行 Spring Boot 和日志记录

Cha*_*lah 5 java logging spring spring-mvc log4j2

我正在外部 Tomcat 服务器上部署我的 Spring Boot 应用程序。我似乎无法让我的 Eclipse 控制台显示我在代码中编写的日志消息:

private static final Logger log = LoggerFactory.getLogger(PersonServiceImpl.class);
...
log.info("Running...");
Run Code Online (Sandbox Code Playgroud)

我设法记录了所有休眠跟踪,但仍然无法显示我添加到代码中的日志消息:

logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
logging.level.root=INFO
logging.level.org.springframework.web=INFO
Run Code Online (Sandbox Code Playgroud)

而且 catalina 日志文件夹不包含我需要的记录信息。

我该怎么办?

Hat*_*tim -2

我认为,您将 spring boot 应用程序部署在外部 tomcat 中,并将其打包为 war 文件。

您可以检查此配置:

在你的 pom.xml 中

<!-- mark the embedded tomcat server as provided -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

以及包装价值:

<packaging>war</packaging>
Run Code Online (Sandbox Code Playgroud)

在依赖项中,如果您使用 Web starter :

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

它传递地依赖于日志记录启动器,这意味着我们只能添加启动器 Web 依赖项,而无需提供更多日志记录组件。

在 application.properties 文件中,添加以下行:

logging.level.org.springframework.web=INFO
logging.level.org.hibernate=INFO
Run Code Online (Sandbox Code Playgroud)

之后,使用 Maven,您可以输入:

mvn clean package
Run Code Online (Sandbox Code Playgroud)

并将其移至外部 tomcat :

cp target/project.war apache-tomcat-8.X.X/webapps/project.war
./apache-tomcat-8.X.X/bin/startup.sh
Run Code Online (Sandbox Code Playgroud)