logback没有找到maven的属性project.build.directory

mar*_*31b 5 spring properties logback maven spring-boot

我有一个Spring Boot和maven的小项目,现在我正在尝试配置logback来写入文件.我希望它写入一个给定的文件${project.build.directory}/${log.folder}/logfile.log,因此构建目录的子文件夹${log.folder}是我在application.properties文件中指定的属性,放在我的/resources文件夹下.

这是我的logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <logger name="org.springframework.boot" level="INFO"/>
    <logger name="org.springframework.security" level="ERROR"/>
    <logger name="org.glassfish.jersey" level="DEBUG"/>

    <property resource="application.properties"/>

    <appender name="DUMMY_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${project.build.directory}/${log.folder}/logfile.log</file>
        <encoder>
            <pattern>%d{"yyyy-MM-dd HH:mm:ss,SSS zzz"}, [%thread] %-5level %logger{5} - %msg%n
            </pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.folder}/spring.log.%d</fileNamePattern>
        </rollingPolicy>
    </appender>

    <logger name="xxxxxx" level="INFO" additivity="false">
        <appender-ref ref="DUMMY_APPENDER"/>
    </logger>

    <root level="INFO">
        <appender-ref ref="DUMMY_APPENDER"/>
    </root>
</configuration>
Run Code Online (Sandbox Code Playgroud)

它写日志,但我的问题是,当我运行应用程序时,它会创建一个文件夹project.build.directory_IS_UNDEFINED,然后将我的log.folder放在它下面.它在文档中说,那

作为其构建工具,logback依赖于Maven,这是一种广泛使用的开源构建工具.

当在logback.xml中,我开始键入$ {pro ...然后我的IDE显示一组可用的maven隐式属性.

所以它应该有效,但事实并非如此.知道为什么吗?

Ash*_*dal 7

由于@luboskmac的说法,它不起作用.

以下是如何使其工作.我已经重现了这个问题并推出了一个解决方案:https://github.com/ajorpheus/logback-maven/releases

以下是修复程序的摘要:https://github.com/ajorpheus/logback-maven/commit/f245e5a6f4c13f9ba8e161c5452d296b653977d0

  1. 在pom中定义一个属性来保存日志文件的位置:

    在此输入图像描述

  2. 使用logback.xmlappender中的属性:

在此输入图像描述

  1. 启用maven资源过滤,以便将正在扫描的资源中定义的任何maven属性替换为其对应的值

在此输入图像描述


lub*_*nac 2

${project.build.directory}是Maven的属性,仅在maven构建期间可用。另一方面,Logback 正在应用程序的运行时使用。很明显${project.build.directory}不是在运行时定义的。

您需要选择适合运行时环境和部署拓扑的位置。