Java Log4j 2不';无法写入文件

Java Log4j 2不';无法写入文件,java,logging,log4j,log4j2,Java,Logging,Log4j,Log4j2,具有以下配置文件: <?xml version="1.0" encoding="UTF-8"?> <Configuration status="warn"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="[%d{HH:mm:ss.SSS} %-5level] %logger{36}

具有以下配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="[%d{HH:mm:ss.SSS} %-5level] %logger{36} - %msg%n"/>
        </Console>
        <File name="File" fileName="error.log">
            <PatternLayout pattern="[%d{ISO8601} %-5level] %logger{36} - %msg%n"/>
        </File>
    </Appenders>
    <Loggers>
        <Logger name="errors" level="error">
            <AppenderRef ref="File"/>
        </Logger>
        <Root level="all">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

它不会记录两次。我真的没有主意了,我甚至从文档()中复制了一个例子,这也留下了一个空文件。

啊,我太傻了。属性
name
似乎是类将使用该记录器的过滤器。将
名称
更改为我的顶级软件包解决了问题。

尝试类似的方法

在这里,目标是需要注意的重要属性

控制台appender定义了一个param元素。查看用于ConsoleAppender的javadoc,setTarget方法用于选择将消息打印到哪个控制台流,System.out或System.err。该示例将appender配置为使用System.out


是,根记录器级别为ALL,因此它将接收所有事件。 一种选择是这样做:

<Loggers>
  <Root level="all">
    <AppenderRef ref="Console" level="trace" />
    <AppenderRef ref="File" level="error" />
  </Root>
</Loggers>


这样,您就只有一个记录器,所以您不需要担心可添加性,您可以在代码中编写
LogManager.getLogger(MyClass.class)
来获取
logger
实例。(如果使用命名记录器,则需要在代码中使用记录器名称:
LogManager.getLogger(“错误”)

Log4J2在进程完成之前不会写入文件。默认情况下,不会在每次调用记录器时刷新缓冲区。 比如说,

<File name="File" fileName="LogfileName.log" immediateFlush="false" append="false">
<PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>


不会立即登录到该文件。将immediateFlush的值更改为true,以在每次调用记录器时强制刷新缓冲区

您的示例配置似乎是针对log4j-1.2的,但问题是针对log4j2的。这并没有解决我原来遇到的问题,但确实解决了我后来遇到的问题,谢谢!
<Loggers>
  <Root level="all">
    <AppenderRef ref="Console" level="trace" />
    <AppenderRef ref="File" level="error" />
  </Root>
</Loggers>
<File name="File" fileName="LogfileName.log" immediateFlush="false" append="false">
<PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>