Unable to use Spring Property Placeholders in logback.xml

Since Spring Boot 1.3 you have a better way of getting spring properties into your logback-spring.xml configuration:

Now you can just add a "springProperty" element.

<springProperty name="destination" source="my.loggger.extradest"/>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>${destination}</file>
        ...
    </file>
</appender>

https://github.com/spring-projects/spring-boot/commit/055ace37f006120b0006956b03c7f358d5f3729f

edit: thanks to Anders

.........


The solutions above work mostly for bootrap.properties. However, the only way to use properties from remote Spring Config Server in logback config I've currently found, is to apply them programatically:

@Component
public class LoggerConfiguration implements ApplicationListener<EnvironmentChangeEvent> {

    @Autowired protected Environment environment;

    @Override
    public void onApplicationEvent(EnvironmentChangeEvent event) {
        // enviroment here has already loaded all properties and you may alter logback config programatically
        ch.qos.logback.classic.Logger rootLogger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
    }


}

Here is a good example how to customize logback with new appender this way.


As answered above you can access the spring boot properties using the <springProperty> element...but a thing to keep in mind is that the logback configuration file must be named logback-spring.xml, it doesn't work if you name the file logback.xml (I'm using spring-boot 1.3.5.RELEASE)


${...} is not "Spring EL" in Spring; they are property placeholders.

I think you are confusing logback "variables" with Spring "Property Placeholders".

They just happen to use the same syntax ${...}.

logback knows nothing about the Spring property placeholder mechanism and vice-versa. You need to configure your logback variables according to the logback documentation and not in application.properties / application.yml which is strictly a Spring (boot) concept.

EDIT:

After a quick look at the logback docs, adding

<property resource="application.properties" />

to the logback.xml should work.