【问题标题】:Spring boot does not load logback-spring.xmlSpring Boot 不加载 logback-spring.xml
【发布时间】:2018-11-07 15:31:05
【问题描述】:

我有一个使用 Logback 进行日志记录的示例 Spring Boot 应用程序。 所以我在 jar 旁边有 logback-spring.xml 来配置日志记录,但是除非我用 logging.config 指定它,否则它不起作用,例如:logging.config=logback-spring.xml

我查看了Spring Boot ignoring logback-spring.xml,这表明它可能是因为某处已经有一个spring.xml,但是在org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(LoggingInitializationContext, LogFile) 上放置断点表明logFile 是空的。

我在这里做错了吗?

【问题讨论】:

  • 如果资源文件夹中有文件,它是否有效?
  • @Patrick 是的,它在资源文件夹下时有效。
  • 您是否尝试将 logback-spring.xml 重命名为 logback.xml ?
  • 不要将文件放在 JAR 旁边。将logback-spring.xml 放在项目的根目录中。执行“bootJar”构建,并执行 JAR。有用吗?
  • @Tamerlane - 如果配置位于验证您的 logback 配置的资源文件夹下时它可以正常工作。您能否复制并粘贴整个 java 命令行,如何启动这个 Spring Boot 应用程序?你能分享你的 base.xml 吗?

标签: java spring spring-boot logback


【解决方案1】:

默认情况下,Spring 将在 jar 文件之外寻找资源。 如果要使用外部 logback 配置文件,则必须在启动 jar 时传递它的位置:

$ java -jar -Dlogback.configurationFile=/full_path/logback.xml app.jar

请不要将 logback.xml 包含到最终的 Jar 文件中,这会导致类路径中有多个 logback.xml 文件。

【讨论】:

  • 出处?
  • 这是当您想以本机 logback 方式设置 logback.xml 时:logback.qos.ch/manual/configuration.html#configFileProperty 但如果您想以春季启动方式进行,您可以在 application.properties 或“java -jar”中设置一个带有相对路径(logging.config=relative/path/logback.xml)的logging.config
【解决方案2】:

根据问题的描述,您使用的是日志配置的外部化版本。该文件保存在 jar 之外。因此,您必须将路径作为运行时参数提及如下:

-Dlogging.config=file:logback-spring.xml

或在 application.properties 中提及相同的属性,如下所示:

logging.config=file:logback-spring.xml

它从资源文件夹中获取文件的原因,因为它是在 spring 中以这种方式配置的。 Spring 通过类路径中的以下名称获取 logback 文件。

logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy

请在spring-boot custom log configuration查看相关文档

【讨论】:

    【解决方案3】:

    只需在您的 logback-spring.xml

    中定义这些行
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <include resource="org/springframework/boot/logging/logback/base.xml"/>
        <logger name="org.springframework.web" level="DEBUG"/>
    </configuration>
    

    【讨论】:

    • 为我工作。谢谢
    【解决方案4】:

    Dockerfile:

    COPY /rootProjectName/src/main/resources/logback-spring.xml /deployments/  
    

    应用程序-dev.properties:

    logging.config=classpath:logback-spring.xml
    

    我正在运行一个 docker 容器,并且必须将资源文件夹复制到我的 Docker 文件中的部署文件夹中...但是一旦复制过来
    这是对我有用的 logging.config 值(添加类路径字)

    【讨论】:

      【解决方案5】:

      这种行为可能有两个原因:

      原因 1: logback-spring.xml 不知何故不在类路径中。您可以在运行时通过打印 System.getProperty("java.class.path") 并检查输出中是否存在包含 logback-spring.xml 的文件夹来验证这一点。

      原因 2:如果原因 1 不是问题,那么类路径中已经有一个名为 logback.xml 或 logback-spring.xml 的文件,这可能会导致冲突。现在你必须在这里找到那个文件。您可以尝试将 logback-spring.xml 重命名为 logback.xml 并检查行为。

      【讨论】:

        【解决方案6】:

        我不知道为什么它不适合你。我在 resource 文件夹中创建了一个 logback-spring.xml 文件,它运行良好。

        以下是日志文件内容:

        <?xml version="1.0" encoding="UTF-8"?>
        <configuration scan="true">
            <include resource="org/springframework/boot/logging/logback/base.xml"/>
            <property name="LOGDIR" value="logs"></property>
            <property name="APP_NAME" value="spring-boot-sample"></property>
        
            <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
                <layout class="ch.qos.logback.classic.PatternLayout">
                    <Pattern>%d ${APP_NAME} %-5level [%thread] %logger: %msg%n</Pattern>
                </layout>
            </appender>
        
            <appender name="ROLLINGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                    <fileNamePattern>${LOGDIR}/${APP_NAME}-log.%d{MM-dd-yyyy}.log</fileNamePattern>
                    <maxHistory>90</maxHistory>
                </rollingPolicy>
                <encoder>
                    <charset>utf-8</charset>
                    <Pattern>%d ${APP_NAME} %-5level [%thread] %logger: %msg%n</Pattern>
                </encoder>
            </appender>
        
            <springProfile name="local">
                <root level="debug">
                    <appender-ref ref="CONSOLE"/>
                </root>
                <logger name="co.jp.oha" additivity="false" level="debug">
                    <appender-ref ref="ROLLINGFILE"/>
                    <appender-ref ref="STDOUT"/>
                </logger>
            </springProfile>
        </configuration>
        

        您可以尝试使用它们。希望对你有帮助。

        【讨论】:

        • 你能分享一下 app.properties 和 pom.xml 吗?或者用 smple 分享 github 链接
        猜你喜欢
        • 2019-01-19
        • 2017-05-08
        • 2019-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-07
        • 2021-10-16
        • 2019-03-15
        相关资源
        最近更新 更多