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()的参数值要相同。

原文地址:https://www.cnblogs.com/yvkm/p/11346566.html