User JVM parameter in log4j2 configuration
Asked Answered
P

1

14

I have an RollingFile Appender defined in my log4j2.xml.

<RollingFile name="RollingFile" fileName="/logs/app.log"
            filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout>
                <Pattern>%d{HH:mm:ss.SSS} - %-5p - %m - [%l]%n</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="10 MB" />
            </Policies>
            <DefaultRolloverStrategy max="20" />
</RollingFile>

What I want to do is to pass this parameter to the JVM at startup:

-Dapp_home=/home/admin/server

The documentation is pretty straight forward. And from what I understand it should work like this:

<RollingFile name="RollingFile" fileName="${jvmrunargs:app_home}/logs/app.log"

But it doesn't. I verified that it is working in general by using the absolut path.

In an other application where I use log4j (1.x) it works like this:

log4j.appender.file.File=${app_home}/logs/app.log
Parfait answered 17/7, 2015 at 19:4 Comment(0)
G
29

Take a look at the System Properties Lookup section of the documentation. If you define a variable as system property using -D like this:

-Dapp_home=/home/admin/server

use

${sys:app_home}

in your Log4j 2 configuration to access it.

Genipap answered 20/7, 2015 at 17:22 Comment(3)
Your answer is better written, but the content/answer is the same. I will delete mine. There is an edit button for a reason, use it instead of posting a duplicate.Gardas
I never used the edit button for anything else than code formatting. It feels like tampering with someone else's property. But I guess that is the way Stackoverflow is supposed to work. I'll remember it next time. Thanks for pointing it out!Genipap
Same answer, same result! It works! :) Thank you both!Parfait

© 2022 - 2024 — McMap. All rights reserved.