Spring Boot - 没有写入日志文件(不遵守logging.file)

Chr*_*ius 27 spring logback slf4j spring-boot

我使用Spring Boot并希望它将日志输出写入文件.

根据文档,这只是通过设置完成

logging.file=filename.log
Run Code Online (Sandbox Code Playgroud)

虽然控制台输出工作正常,filename.log但未创建.此外,如果我手动创建文件,则不会写入任何内容.我错过了什么?

小智 56

使用logging.file.name代替logging.file

在 的更高版本中spring-boot-parent(from version 2.2.0),不推荐使用属性 logging.file。

  • 我已升级到最新的Springboot版本,但未创建日志文件。感谢你的回答。 (2认同)

Chr*_*ius 16

我找到了解决方案.我对它不是很满意,因为它仍然没有回答我原来的问题,为什么logging.file财产不受尊重.

我在同一个目录中创建了logback-spring.xmlGeorges的答案application.properties.根据文档, Spring Boot将从那里获取它.显然,在我的情况下,这不会发生.

我需要另外添加logging.config=classpath:logback-spring.xml,以便它被Spring接收.我的相关部分application.properties现在

logging.config=classpath:logback-spring.xml
logging.file=logs/logfile.log
Run Code Online (Sandbox Code Playgroud)

(我logs手动创建了目录.)


Ind*_*our 15

就我而言,我在下面的应用程序属性文件中使用。

logging.file

相反,我需要使用以下一个:

logging.file.name

从那时起,我就可以将日志放入定向路径文件中。


Sat*_*ish 8

Spring Boot:版本 2.4.3

其中之一应在application.propertiesfile: logging.file.namelogging.file.path

例如:

logging.file.name=logs/myapp.log
logging.file.path=logs
Run Code Online (Sandbox Code Playgroud)

您不必创建logs目录。它将在类路径中自动创建。

要查看其他已弃用的属性,请阅读此类文件~/.m2/repository/org/springframework/boot/spring-boot/2.4.3/spring-boot-2.4.3.jar!/org/springframework/boot/logging/LoggingSystemProperties.class


bea*_*det 7

我有同样的问题。这很可能是由于文件系统上的文件权限所致。我的应用程序文件夹归 root 所有,但 ./logs 归进程所有者所有。因此,以下方法不起作用:

logging.file=my.log

但这确实

logging.file=/opt/myapp/logs/my.log


Rav*_*iah 5

我不知道这是否对您有帮助,但我也在我的Spring-Boot项目中使用了 Logback ,其结构如下

在此处输入图片说明

文件: logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="logback.xsd">

    <property resource="\application.properties"/>

    <appender name="FILE"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${app.logPathPrefix}/myproject.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${app.logPathPrefix}/myproject.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>50MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%thread] [%logger:%line] %msg%n
            </pattern>
        </encoder>
    </appender>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%thread] [%logger:%line] %msg%n
            </pattern>
        </encoder>
    </appender>


    <logger name="org.springframework" level="INFO" />
    <logger name="com.mycompany" level="INFO" />
    <logger name="org.hibernate" level="DEBUG" />


    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>

</configuration>
Run Code Online (Sandbox Code Playgroud)

文件: application.properties

app.logPathPrefix=/var/log/myproject
Run Code Online (Sandbox Code Playgroud)


geo*_*van 5

这是我设法将输出写入本地文件的方法。要禁用控制台日志记录并将输出仅写入文件,您需要一个自定义的logback-spring.xml (将其称为logback-spring.xml,以便您可以利用 Boot 提供的模板功能(日期格式等))导入file-appender.xml而不是 console-appender.xml。为了实现这一点,您必须将此代码粘贴到您的 logback-spring.xml 文件中。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
    <include resource="org/springframework/boot/logging/logback/file-appender.xml" />
    <root level="INFO">
        <appender-ref ref="FILE" />
    </root>
</configuration> 
Run Code Online (Sandbox Code Playgroud)

您还需要将以下内容添加到您的 application.properties 中:

logging.file=myapplication.log
Run Code Online (Sandbox Code Playgroud)

请注意,此日志文件myapplication.log将由 springboot 生成。

这是我的应用程序结构树的样子:

在此处输入图片说明

如果你想玩得更开心,你可以在你的 maven 依赖中找到 base.xml,如下所示:

在此处输入图片说明


小智 5

检查 Springboot 父级的版本。

如果是 2.3.x+ 那么属性应该是logging.file.name=yourapplog.log