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
Chris
  • 515
  • 2
  • 6
  • 13

1 Answers1

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.

hzpz
  • 7,536
  • 1
  • 38
  • 44
  • 2
    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. – alan7678 Jul 20 '15 at 18:40
  • 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! – hzpz Jul 20 '15 at 19:11
  • Same answer, same result! It works! :) Thank you both! – Chris Jul 20 '15 at 19:12