问题
I need to log all info to info.log, all warn to warn.log etc and all my logs to all.log. I've been create a log4j2.xml configuration.
<?xml version="1.0" encoding="UTF-8"?>
<configuration monitorInterval = "3" status = "info">
<appenders>
<File name="ALL_LOG" fileName="logs/all.log">
<PatternLayout pattern="%d{ISO8601} [%-5p] (%F:%L) - %m%n"/>
</File>
<File name="FILE_ERROR" fileName="logs/error.log">
<PatternLayout pattern="%d{ISO8601} [%-5p] (%F:%L) - %m%n"/>
</File>
<File name="FILE_INFO" fileName="logs/info.log">
<PatternLayout pattern="%d{ISO8601} [%-5p] (%F:%L) - %m%n"/>
</File>
<File name="FILE_DEBUG" fileName="logs/debug.log">
<PatternLayout pattern="%d{ISO8601} [%-5p] (%F:%L) - %m%n"/>
</File>
<File name="FILE_WARN" fileName="logs/warn.log">
<PatternLayout pattern="%d{ISO8601} [%-5p] (%F:%L) - %m%n"/>
</File>
<Console name="STDOUT" target="SYSTEM_OUT.log">
<PatternLayout pattern="%d{ABSOLUTE} [%-5p] (%F:%L) - %m%n"/>
</Console>
</appenders>
<loggers>
<root>
<appender-ref ref="ALL_LOG"/>
</root>
<root level="error">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE_ERROR"/>
</root>
<root level="info">
<appender-ref ref="FILE_INFO"/>
</root>
<root level="debug">
<appender-ref ref="FILE_DEBUG"/>
</root>
<root level="warn">
<appender-ref ref="FILE_WARN"/>
</root>
</loggers>
</configuration>
In my programm i define logger:
public class Main {
public static Logger LOG = Logger.getLogger(Main.class);
public static void main(String[] args) {
LOG.debug("Debug message");
LOG.warn("Warning message");
LOG.info("Info message");
}
But only in file warn.log i have Warning message
, other files create, but empty. What i doing wrong?
回答1:
You can only have one logger in the configuration. On that root logger, define multiple Appender-Refs, one for each File appender.
- For each Appender-Ref, specify the level, to filter out too detailed events:
<Appender-ref ref="InfoFile" level="info" />
- Then, on each File Appender, have a filter that DENIES events that are not exactly the desired level. This filters out events that are too general. See this question for an example.
来源:https://stackoverflow.com/questions/36887537/how-to-log-in-different-file-log4j2