log4j2不会写入登录文件

时间:2015-02-16 08:22:43

标签: java logging configuration log4j2

以下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>

1 个答案:

答案 0 :(得分:1)

您的代码如何获取Logger实例?假设你的代码看起来像这样:

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

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

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

但是,配置中的命名记录器仅匹配"mylogger",因此此记录器不会收到“我的消息在哪里?”记录事件。根记录器将获取事件并将其发送到其控制台appender。