Spring 引导日志记录问题(使用 logback)

Spring boot logging problem (with logback)

我编写 spring 启动应用程序,使用 logback 记录到文件。

我的logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOG_DIR" value="logs"/>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                %d{dd-MM-yyyy HH:mm:ss.SSS} %magenta([%thread]) %highlight(%-5level) %logger.%M - %msg%n
            </pattern>
        </encoder>
    </appender>
    <appender name="SAVE-TO-FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/log.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>
                %d{dd-MM-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n
            </Pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- rollover daily & on size-->
            <fileNamePattern>
                ${LOG_PATH}/archived/log_%d{dd-MM-yyyy}_%i.log
            </fileNamePattern>
            <maxFileSize>200MB</maxFileSize>
            <maxHistory>10</maxHistory>
            <totalSizeCap>2GB</totalSizeCap>
        </rollingPolicy>
    </appender>
    <springProfile name="dev">
        <root level="INFO">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="SAVE-TO-FILE"/>
        </root>
        <logger name="com.elektrosoft.centralServer.telekomCentralServer" additivity="false" level="DEBUG">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="SAVE-TO-FILE"/>
        </logger>
    </springProfile>
    <springProfile name="prod">
        <root level="INFO">
            <appender-ref ref="SAVE-TO-FILE"/>
        </root>
        <logger name="com.elektrosoft.centralServer.telekomCentralServer" additivity="false" level="DEBUG">
            <appender-ref ref="SAVE-TO-FILE"/>
        </logger>
    </springProfile>
</configuration>

我的application.properties

logging.level.root=info
logging.level.com.elektrosoft.centralServer.telekomCentralServer=debug
logging.level.org.hibernate.SQL=error
logging.file.path=/var/logs/spring-app-logs/
logging.file.name=log.log
logging.pattern.file=%d{dd-MM-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n
logging.pattern.console=%d{dd-MM-yyyy HH:mm:ss.SSS} %magenta([%thread]) %highlight(%-5level) %logger.%M - %msg%n

当我从 intellij 运行 应用程序 IDE 并且日志写入该位置的文件时,这工作正常。我将此应用程序部署到 aws beanstalk,一切正常。问题是当我 运行 来自终端(windows 或 linux)的应用程序没有启动时,在创建应用程序的文件夹中 LOG_PATH_IS_UNDEFINED.

我在 application.properties 中定义了 logging.file.path 并且我将 logback 文件重命名为 logback-spring 并且当 logging.file.path 被定义 LOG_PATH 时从文档中重命名由 spring.

定义

我不明白为什么如果我从 IDE 和 AWS 中 运行 应用程序可以工作,但如果我从终端 运行 使用 java -罐子 springAPP.jar.

为什么会这样?如何解决这个问题?

请帮忙!

感谢您的帮助。

我猜你忘记了在 运行 jar 文件之前导出 LOG_PATH 变量。您可以为此创建一个脚本文件。 喜欢start.sh

#!/bin/bash
export LOG_PATH=/var/logs/spring-app-logs/
java -jar springAPP.jar

和运行./start.sh

你没有在你的logback中定义LOG_PATH-spring.xml

添加以下行:

    <property name="LOG_PATH" value="./logsFolder"/>

在下一行之后

    <property name="LOG_DIR" value="logs"/>

刚把LOG_DIR改成了LOG_PATH

制作:

    <property name="LOG_PATH" value="./logsFolder"/>