Java Spring引导不加载logback-Spring.xml

Java Spring引导不加载logback-Spring.xml,java,spring,spring-boot,logback,Java,Spring,Spring Boot,Logback,我有一个示例Spring引导应用程序,它使用Logback进行日志记录。 因此,我在jar旁边有logback spring.xml来配置日志记录,但是除非我用logging.config指定它,例如:logging.config=logback spring.xml 我已经研究了它可能的位置,因为在某个地方已经有一个spring.xml,但将断点放在org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConv

我有一个示例Spring引导应用程序,它使用Logback进行日志记录。 因此,我在jar旁边有
logback spring.xml
来配置日志记录,但是除非我用
logging.config
指定它,例如:
logging.config=logback spring.xml

我已经研究了它可能的位置,因为在某个地方已经有一个
spring.xml
,但将断点放在
org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(LoggingInitializationContext,LogFile)
上表明日志文件是空的


我在这里做错了什么吗?

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

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


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

只需在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>

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

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

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

我不知道为什么它对您不起作用。我在resource文件夹中创建了一个logback spring.xml文件,效果很好

logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy
以下是日志文件的内容:

<?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>

%d${APP_NAME}%-5级[%thread]%记录器:%msg%n
${LOGDIR}/${APP_NAME}-log.%d{MM dd yyyy}.log
90
utf-8
%d${APP_NAME}%-5级[%thread]%记录器:%msg%n

你可以试试看。我希望它能帮助您。

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

-Dlogging.config=file:logback-spring.xml
logging.config=file:logback-spring.xml
或者在application.properties中提及相同的属性,如下所示:

-Dlogging.config=file:logback-spring.xml
logging.config=file:logback-spring.xml
它从resources文件夹中拾取文件的原因是,它在spring中以这种方式配置。Spring从类路径中通过以下名称获取日志文件

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

Dockerfile查看相关文档:

COPY /rootProjectName/src/main/resources/logback-spring.xml /deployments/  
application-dev.properties:

logging.config=classpath:logback-spring.xml
我正在运行docker容器,必须将资源文件夹复制到docker文件中的部署文件夹中。。。但一旦复制过来

这是适用于我的logging.config值(添加classpath单词)

如果文件位于资源文件夹中,它是否有效?@Patrick是的,当文件位于资源文件夹下时它有效。是否尝试将logback-spring.xml重命名为logback.xml?不要将文件放在JAR旁边。将
logbackspring.xml
放在项目的根目录中。执行“bootJar”构建,并执行JAR。它能工作吗?@Tamerlane-当配置位于验证您的logback配置的resources文件夹下时,它是否能正常工作。你能复制并粘贴整个java命令行吗?你是如何启动这个spring boot应用程序的?你能分享你的base.xml吗?你能分享app.properties和pom.xml吗?或者与smpleorigin source共享github链接?这是当您想要以本机logback方式设置logback.xml时:logback.qos.ch/manual/configuration.html#configFileProperty,但是如果您想要以spring引导方式进行设置,您可以只设置一个带有相对路径(logging.config=relative/path/logback.xml)的logging.config在application.properties或“java-jar”中对我有用。谢谢