log4j2没有输出文件?

时间:2016-05-22 15:12:59

标签: java tomcat web-applications log4j2

我有以下log4j2配置:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
    <Property name="LOG_DIR">${sys:web.root}/logs</Property>
    <Property name="ARCHIVE">${LOG_DIR}/archive</Property>
</Properties>
<Appenders>
    <Console name="console-log" target="SYSTEM_OUT">
        <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/>
    </Console>
    <RollingFile name="paypal-log"
                 fileName="${LOG_DIR}/paypal.log"
                 filePattern="${ARCHIVE}/paypal.log.%d{yyyy-MM-dd-hh-mm}.gz">
        <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/>
        <Policies>
            <TimeBasedTriggeringPolicy interval="5" modulate="true"/>
        </Policies>
    </RollingFile>
</Appenders>
<Loggers>
  <Logger name="com.retailstore.paypal" level="info" additivity="false">
        <appender-ref ref="paypal-log" level="info"/>
    </Logger>
    <Root level="error" additivity="false">
        <AppenderRef ref="console-log"/>
    </Root>
</Loggers>

在我的(Eclipse)Web应用程序中,我有一个类com.retailstore.paypal.paypalfunctions,其中我有

private static final Logger logger = LogManager.getLogger(paypalfunctions.class.getName());
...

logger.error("paypal error");

但是Webcontent文件夹下没有logs / paypal.log。应该在哪里出现?如果我删除记录器,控制台输出似乎有效。

输出TRACE:

2016-05-23 19:24:03,231 http-nio-8080-exec-2 TRACE PatternProcessor.getNextTime返回2016/05 / 23-19:25:00.000,nextFileTime = 2016/05 / 23-19:24 :00.000,prevFileTime = 2016/05 / 23-19:14:00.000,current = 2016/05 / 23-19:24:03.230,freq = EVERY_MINUTE 2016-05-23 19:24:03,247 http-nio-8080-exec-2 TRACE DefaultRolloverStrategy.purge()耗时15.0毫秒 2016-05-23 19:24:03,254 http-nio-8080-exec-2 DEBUG RollingFileManager执行同步FileRenameAction [$ {sys:web.root} /logs/paypal.log到$ {sys:web.root} / logs /archive/paypal.log.2016-05-23-07-14,renameEmptyFiles = false] 2016-05-23 19:24:03,256 http-nio-8080-exec-2 DEBUG RollingFileManager执行异步GzCompressAction [$ {sys:web.root} /logs/archive/paypal.log.2016-05-23-07- 14到$ {sys:web.root} /logs/archive/paypal.log.2016-05-23-07-14.gz,deleteSource = true]

2 个答案:

答案 0 :(得分:2)

尝试设置<Configuration status="trace">。 这将显示log4j内部调试语句,让您深入了解log4j的配置方式。

以下是在未正确设置系统属性的情况下如何定义默认值:

<Properties>
    <Property name="web.root">/path/to/web/root</Property>
    <Property name="LOG_DIR">${sys:web.root}/logs</Property>
    <Property name="ARCHIVE">${LOG_DIR}/archive</Property>
</Properties>

LOG_DIR现在将查看系统属性,但如果找不到,它将回退到配置中定义的值。

答案 1 :(得分:0)

web.root系统属性设置为什么?该文件应出现在该目录指向的任何位置的logs目录下。如果未定义,Log4j将创建一个名为$ {sys:web.root}的目录,该文件将位于该目录下的logs目录中。

正如Remko建议的那样,启用跟踪将明确告诉您创建它的位置。