log4j2可以打印到控制台,但无法打印到文件
package day19; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class Hello { static Logger logger = LogManager.getLogger(Hello.class.getName()); public static boolean hello() { // trace 级别的信息 ,单独列出来是希望你在某个方法或者程序逻辑开始的时候调用 // 和logger.trace("entry")基本一个意思; logger.entry(); // logger.trace("entry"); // error级别的信息,参数就是你输出 信息 logger.error("Did id again!"); logger.info("我是info信息"); logger.warn("我是warn信息"); logger.debug("我是debug信息"); logger.fatal("我是fatal信息"); // 这个就是制定Level类型的调用, logger.log(Level.DEBUG, "我是debug信息"); // 和entry() 对应的结束方法,和logger.trace("exit");一个意思 logger.exit(); return false; } public static void main(String[] args) { hello(); } }
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration status="OFF"> <Appenders> <!-- 打印到文件 --> <File name="log" fileName="E:/ECLIPSEWORKSPACE/day19/logfile.log"> <PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss.SS} [%t] %-5level %logger{36} -%msg%n"/> </File> <!-- 打印到控制台 --> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss.SS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers>
<!-- 因name的属性不等于getLogger方法的参数,导致无法打印到文件 --> <Logger name="Hello" level="ERROR" additivity="false"> <AppenderRef ref="log"/> </Logger> <Root level="trace"> <AppenderRef ref="Console"/> </Root> </Loggers> </configuration>
控制台运行结果:
能创建文件,但是没有打印内容:
原因:Logger的name属性要和getLogger()的参数值要相同。
一年365天,每天进步一点点。