0

I have an application where i defined the location to the external log4j2.properties. I have defined the Log4jServletContextListener in the web.xml and if i provide a path to the file it works. I am trying to figure out how to use a place holder and get the value of the context into it. Can any one help?

Here is my tomcat context entry

<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Environment name="demo/log4j2.location" type="java.lang.String" value="C:/conf/log4j2.xml"/>
</Context>

I have a bean setup that's grabbing the context entry. This is working fine.

@Bean("Logging")
    public String getConfig(
            @Value("${demo/log4j2.location}") String log4jConfigLocation
    ){
        validate(log4jConfigLocation, not(equalTo("${demo/log4j2.location}")));
        return log4jConfigLocation;
    }

I can also get the context value this way if its easier to use.

@Component
public class Log4jLoader {
  
    String location;
  
    public  Log4jLoader(@Value("${construct-demo/log4j2.location}") String location){
        this.location = location;
        loadLog4jConfig();
    }

    private void loadLog4jConfig() {

in my web.xml

<context-param>
    <param-name>isLog4jAutoInitializationDisabled</param-name>
    <param-value>true</param-value>
</context-param>
<listener>
    <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
</listener>

<context-param>
    <param-name>log4jContextName</param-name>
    <param-value>demo</param-value>
</context-param>

<context-param>
    <param-name>log4jConfiguration</param-name>
    <param-value>file:$(location)</param-value>
</context-param>

THIS WORKS
<!--<context-param>-->
<!--<param-name>log4jConfiguration</param-name>-->
<!--<param-value>file:///C:/conf/log4j2.xml</param-value>-->
<!--</context-param>-->

is there a way to get that value into the file:$(location) ?

I have been stuck trying to figure this out for days and exhausting my googling

0 Answers0