Hi, I’m seeing some unfortunate caching or substitution behavior when using system property lookups in a PatternLayout. I’m using a system property lookup to inject some application-specific context into all my log lines. The context is not available when the logging system is initialized, but is set later.
The layout I’m using is similar to this: <PatternLayout pattern="${sys:testProperty} %m%n"/>. What I’m seeing is that if I initialize the logging system before “testProperty” has a value, then the placeholder is put into the Layout in the appender. This causes Log4j to look up the system property every time an event is logged. Logging a few lines, I get something like this: ${sys:testProperty} System property not yet set firstValue System property set to first value secondValue System property set to second value As you can see, the placeholder is left in the line logged before the property is set, but Log4j looks up the value for each event, so changes to the system property are reflected. What I’d like to be able to do is set a default value to use for lines up until the property is set. This does not appear to be workable though. If I either set the system property to some value before initializing the logging system, or I set a default in the pattern like ${sys:testProperty:-default}, log4j reacts by replacing the placeholder in the Layout by the default value. The effect is that the default value becomes permanent, and logs stop changing based on the system property value. default System property not yet set default System property set to first value default System property set to second value Is there a way to disable this “permanent substitution” and get log4j to do the system property lookup for every log event, even if there is a default value? If not, should there be? System properties can be changed from inside the application, so it seems strange to assume that if a system property has a value during logging init, it will keep that same value permanently. I’ve uploaded a reproducer here https://github.com/srdo-humio/log4j-sys-lookup-cache-repro.