I am attempting to implement log4j in my spring-boot (3.4.0) app.

My build is done using Gradle. My depedendencies are as such.

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'com.fasterxml.jackson.core:jackson-databind'
    implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml'
    implementation 'org.postgresql:postgresql'
    implementation 'org.springframework.data:spring-data-mongodb:4.4.0'
    implementation 'org.springframework.data:spring-data-commons:3.4.0'
    implementation 'org.springframework.boot:spring-boot-starter-actuator:3.4.0'
    implementation 'org.mongodb:mongodb-driver-sync:5.2.1'
    implementation 'org.mongodb:mongodb-driver-core:5.2.1'
    implementation 'com.google.code.gson:gson:2.11.0'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation "me.paulschwarz:spring-dotenv:4.0.0"
    implementation 'org.apache.logging.log4j:log4j-mongodb:2.24.3'
    implementation "org.springframework.boot:spring-boot-starter-log4j2:3.4.0"
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

    modules {
        module("org.springframework.boot:spring-boot-starter-logging") {
            replacedBy("org.springframework.boot:spring-boot-starter-log4j2", "Use Log4j2 instead of Logback")
        }
    }

Im using the modules approach to replace the spring-boot-starter-logging with the spring-boot-starter-log4j2 module. I have run gradle dependencies and verified that that is happening.

|    |    |    +--- org.springframework.boot:spring-boot-autoconfigure:3.3.5
|    |    |    |    \--- org.springframework.boot:spring-boot:3.3.5 (*)
|    |    |    +--- org.springframework.boot:spring-boot-starter-logging:3.3.5 -> org.springframework.boot:spring-boot-starter-log4j2:3.4.0
|    |    |    |    +--- org.apache.logging.log4j:log4j-slf4j2-impl:2.24.1 -> 2.23.1
|    |    |    |    |    +--- org.apache.logging.log4j:log4j-api:2.23.1
|    |    |    |    |    +--- org.slf4j:slf4j-api:2.0.9 -> 2.0.16
|    |    |    |    |    \--- org.apache.logging.log4j:log4j-core:2.23.1
|    |    |    |    |         \--- org.apache.logging.log4j:log4j-api:2.23.1
|    |    |    |    +--- org.apache.logging.log4j:log4j-core:2.24.1 -> 2.23.1 (*)
|    |    |    |    \--- org.apache.logging.log4j:log4j-jul:2.24.1 -> 2.23.1
|    |    |    |         \--- org.apache.logging.log4j:log4j-api:2.23.1

In my log4j2.xml file the config looks like this.

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
    <Properties>
        <Property name="LOG_PATTERN">%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} %p %m%n</Property>
        <Property name="APP_LOG_ROOT">c:/temp</Property>
    </Properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT" follow="true">
            <PatternLayout pattern="${LOG_PATTERN}" />
        </Console>
        <RollingFile name="appLog"
                     fileName="${APP_LOG_ROOT}/SpringBoot2App/application.log"
                     filePattern="${APP_LOG_ROOT}/SpringBoot2App/application-%d{yyyy-MM-dd}-%i.log">
            <PatternLayout pattern="${LOG_PATTERN}" />
            <Policies>
                <SizeBasedTriggeringPolicy size="19500KB" />
            </Policies>
            <DefaultRolloverStrategy max="1" />
        </RollingFile>
    </Appenders>
    <Loggers>
        <Logger name="com.howtodoinjava.app" additivity="false">
            <AppenderRef ref="appLog" />
            <AppenderRef ref="Console" />
        </Logger>
        <Root level="debug">
            <AppenderRef ref="Console" />
            <AppenderRef ref="appLog" />
        </Root>
    </Loggers>
</Configuration>

I would have expected spring to fail on startup with this config. Mainly because I am running this on a Mac and the APP_LOG_ROOT value of c:/temp should fail. But instead spring just continues to do it's logging as if the log4j2.xml is never there .

If I force loading of it by setting 'logger.config=classpath:log4j2.xml' in my application.properties then on start I get a bunch of warnings about how logback-classic is still in place, but nothing actually gets logged. The files in the XML config never get created, and I am still unable to control any of the logging.

Comment From: philwebb

We do have a smoke test that checks that log4j2.xml works, but perhaps it's not catching something unique to your situation.

Could you please provide a sample application that we can run and debug to see what's going on?

Comment From: spring-projects-issues

If you would like us to look at this issue, please provide the requested information. If the information is not provided within the next 7 days this issue will be closed.

Comment From: spring-projects-issues

Closing due to lack of requested feedback. If you would like us to look at this issue, please provide the requested information and we will re-open the issue.