已部署的 Spring Boot 应用程序的 spring-boot-logger.log 文件位置

Posted

技术标签:

【中文标题】已部署的 Spring Boot 应用程序的 spring-boot-logger.log 文件位置【英文标题】:spring-boot-logger.log file location for deployed spring boot app 【发布时间】:2021-11-17 00:51:04 【问题描述】:

我按照 this 教程在我的应用程序中设置了 spring boot 日志记录,它在我的开发环境中正常工作,但在我部署应用程序之后就不行了。

部署应用程序时,spring 应用程序日志文件应转到$CATALINA_BASE/logs/spring-boot-logger.log。我该如何配置?

我的 logback-spring.xml:

<property name="LOGS" value="./logs" />

<appender name="Console"
          class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
        <Pattern>
            %black(%dISO8601) %highlight(%-5level) [%blue(%t)] %yellow(%C1.): %msg%n%throwable
        </Pattern>
    </layout>
</appender>

<appender name="RollingFile"
          class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>$LOGS/spring-boot-logger.log</file>
    <encoder
            class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>%d %p %C1. [%t] %m%n</Pattern>
    </encoder>

    <rollingPolicy
            class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- rollover daily and when the file reaches 10 MegaBytes -->
        <fileNamePattern>$LOGS/archived/spring-boot-logger-%dyyyy-MM-dd.%i.log
        </fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
</appender>

<!-- LOG everything at INFO level -->
<root level="info">
    <appender-ref ref="RollingFile" />
    <appender-ref ref="Console" />
</root>

<!-- LOG "com.baeldung*" at TRACE level -->
<logger name="xxx.app" level="trace" additivity="false">
    <appender-ref ref="RollingFile" />
    <appender-ref ref="Console" />
</logger>

当我使用此配置在部署服务器上启动应用程序时,我得到:

java.lang.IllegalStateException: Logback configuration error detected:
ERROR in ch.qos.logback.core.rolling.RollingFileAppender[RollingFile] - Failed to create parent directories for [/./logs/spring-boot-logger.log]
ERROR in ch.qos.logback.core.rolling.RollingFileAppender[RollingFile] - openFile(./logs/spring-boot-logger.log,true) call failed. java.io.FileNotFoundException: ./logs/spring-
boot-logger.log (No such file or directory)

我也尝试在 application.properties 中配置 logging.file.name = $catalina.base/logs/$service.name.log,如建议的 here,但在本地运行 mvn clean install 时收到错误

[ERROR] contextLoads  Time elapsed: 0.004 s  <<< ERROR!
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'catalina.base' in value "$catalina.base/logs/$service.name.log"

【问题讨论】:

你是如何部署你的应用程序的?您似乎想将其部署在外部 Tomcat 中,但缺少 catalina.base 属性表明您正在使用嵌入式 Tomcat 运行它。 嗨@PiotrP.Karwasz 我正在将它部署到外部Tomcat。在本地,我使用嵌入式 Tomcat。我相应地更改了我的 pom.xml(评论/取消评论 &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-tomcat&lt;/artifactId&gt; &lt;scope&gt;provided&lt;/scope&gt; &lt;/dependency&gt; 【参考方案1】:

您想将日志文件写入$CATALINA_BASE/logs 目录,但您在配置文件中使用了./logs。如果您的 Tomcat 服务器的工作目录是 $CATALINA_BASE,这当然可以工作,但假设 Tomcat 服务器的 工作目录 是不安全的(在您的情况下,它不是 $CATALINA_BASE )。

在您的logback-spring.xml 文件中使用variable substitution:

<property name="LOGS" value="$catalina.base:-./logs" />

当没有catalina.base 属性时(即当您使用嵌入式Tomcat 时),将使用默认值.

【讨论】:

以上是关于已部署的 Spring Boot 应用程序的 spring-boot-logger.log 文件位置的主要内容,如果未能解决你的问题,请参考以下文章

Heroku Spring Boot Gradle App 已部署但 App 崩溃

Tomcat中的spring-boot应用程序战争部署,现有的spring web应用程序失败

列出所有已部署的 REST 端点(spring-boot、tomcat)

java spring boot 部署redis

列出所有已部署的 REST 端点(spring-boot、jersey)

springboot之热部署