Reputation: 283
This is my application code. When it is run, only the error string is logged. I can see the yaml file copied into the build/resources folder. I'm not able to diagnose why the auto-configuration isn't working even though I've followed the naming convention and placed the yaml file in the proper place.
public class App {
private static final Logger logger = LogManager.getLogger();
public static void main(String[] args) {
logger.trace("Entering application.");
logger.error("Some error");
logger.trace("Exiting application.");
}
}
My build.gradle looks like this.
plugins {
id 'java'
id 'application'
id 'groovy'
}
repositories {
jcenter()
}
dependencies {
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.13.1'
compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.13.1'
implementation 'com.google.guava:guava:28.0-jre'
testImplementation 'org.codehaus.groovy:groovy-all:2.5.7'
testImplementation 'org.spockframework:spock-core:1.3-groovy-2.5'
testImplementation 'junit:junit:4.12'
}
application {
mainClassName = 'myapp.App'
}
I've put the log4j2.yaml file under src/main/resources.
Configuration:
status: warn
name: YAMLConfigTest
properties:
property:
name: filename
value: target/test-yaml.log
thresholdFilter:
level: debug
appenders:
Console:
name: STDOUT
PatternLayout:
Pattern: "%m%n"
File:
name: File
fileName: ${filename}
PatternLayout:
Pattern: "%d %p %C{1.} [%t] %m%n"
Filters:
ThresholdFilter:
level: error
Loggers:
logger:
-
name: org.apache.logging.log4j.test1
level: debug
additivity: false
ThreadContextMapFilter:
KeyValuePair:
key: test
value: 123
AppenderRef:
ref: STDOUT
-
name: org.apache.logging.log4j.test2
level: debug
additivity: false
AppenderRef:
ref: File
Root:
level: debug
AppenderRef:
ref: STDOUT
I re-read the docs and they mention that JSON and YAML config files need additional dependencies to work. I had missed it since I only looked at the initial paragraph and the sample file. Adding the Jackson Core and Databind dependencies to my build.gradle allowed the config to take effect.
// for JSON and YAML configs
compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.10.3'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.10.3'
compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.13.1'
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.13.1'
Upvotes: 4
Views: 2182
Reputation: 56
Karanveer's solution in "Update" section helped me a lot, thanks (it needed to add Jackson dependency).
But for me it was Jackson dataformat:
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.3'
There is description of dependencies that might be required for different Log4J configurations: Log4j Runtime Dependencies
Upvotes: 3
Reputation: 9141
Your loggers are configured at the debug level. The first and third logging calls are at trace level. Trace is more fine grained that debug so those won't be logged. That leaves only your error log event. Since by default the name for the Logger your application is using will be "App" it will use the root logger which will route it to the console.
Upvotes: 1