Log4j 2 JSON Configuration
I found a solution to the problem.
It turns out that the Log4j 2 Configuration doesn't document all the required dependencies:
The JSON support uses the Jackson Data Processor to parse the JSON files. These dependencies must be added to a project that wants to use JSON for configuration:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.8.7</version></dependency><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.7</version></dependency><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.8.7</version></dependency>
I believe that I have an additional correction to the JSON configuration that was posted. For me, this part produces problems:
"properties": { "property": { "name":"Directory", "value":"${sys:user.home}/logs" }, "property": { "name":"FileName", "value":"test.log" } },
On my setup, this will output ~/logs/${FileName} or ~/${Directory}/test.log, which means that it is only interpolating one of the properties instead of both.
I concluded from this that the properties were not specified correctly in JSON form. To fix it, I specified the properties as a JSON array
"properties": { "property": [{ "name":"Directory", "value":"${sys:user.home}/logs" }, { "name":"FileName", "value":"test.log" }] },
With this in place, it seems to fix the problem and correctly outputs to ~/logs/test.log
My setup is log4j2 2.0.2 on Mac with tomcat 7.0.55