log4j2 不写入登录文件

log4j2 doesnt write log in files

以下 XML 配置是我的 log4j 配置,我在控制台中看到了日志消息,但日志文件是空的,它有什么问题吗?

我正在使用 log4j-api-2.1

<Properties>
    <Property name="log-path">logs</Property>
</Properties>

<Appenders>

    <RollingFile name="file-log" fileName="${log-path}/logtile.log/"
        filePattern="${log-path}/logtile-%d{yyyy-MM-dd}.log">

        <PatternLayout>
            <pattern>%d{HH:mm:ss.SSS} [%t] %-5level - %msg%n</pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy interval="1"
                modulate="true" />
            <SizeBasedTriggeringPolicy size="500" />
        </Policies>
        <DefaultRolloverStrategy max="20" />
    </RollingFile>


    <Console name="Console" target="SYSTEM_OUT">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level - %msg%n" />
    </Console>

</Appenders>

<Loggers>
    <Logger name="mylogger" level="info" additivity="false">
        <appender-ref ref="file-log" level="info" />
        <appender-ref ref="Console" level="info" />
    </Logger>

    <Root level="info">
        <appender-ref ref="Console" />
    </Root>     
</Loggers>

你的代码是如何获取Logger实例的?假设您的代码如下所示:

Logger log = LogManager.getLogger(com.mycompany.MyClass.class);
log.info("Where is my message?");

请注意,您的记录器的完全限定名称是 "com.mycompany.MyClass"。 此记录器将向根记录器以及名称匹配 "com.mycompany.MyClass" 的所有命名记录器发送消息。以下配置名称将匹配此完全限定的 class:

  • <Logger name="com.mycompany.MyClass" ...>
  • <Logger name="com.mycompany" ...>
  • <Logger name="com" ...>

但是,您配置中的命名记录器仅匹配 "mylogger",因此该记录器将不会收到 "Where is my message?" 日志事件。根记录器将获取事件并将其发送到它的附加程序,即控制台。