【问题标题】:log4j2 with no output file?log4j2 没有输出文件?
【发布时间】:2016-05-22 15:12:58
【问题描述】:

我有以下 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。它应该出现在哪里?如果我删除记录器,控制台输出似乎可以工作。

带有跟踪的输出:

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]

【问题讨论】:

    标签: java tomcat web-applications log4j2


    【解决方案1】:

    尝试设置&lt;Configuration status="trace"&gt;。 这将显示 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 现在将在系统属性中查找,但如果未找到,它将回退到配置中定义的值。

    【讨论】:

    • 谢谢,我会尝试并回复
    • 还是不知道在哪里??
    • 我尝试了 ~/logs 但我的主目录中没有显示任何内容。
    • 好的,它适用于 /Users/xxxx/logs 但不适用于 ~/logs。想要一个便携式路径,我该怎么做?
    【解决方案2】:

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

    正如 Remko 建议的那样,启用跟踪将明确告诉您它是在哪里创建的。

    【讨论】:

    • 我不确定你的意思。是的,只要您定义了 web.root 系统属性,这种技术就可以在 tomcat 下工作。在 tomcat 下,如果您希望文件位于运行 tomcat 的某个位置,也可以使用 ${sys:catalina.home} 或 ${sys:catalina.base}。
    • 为 Log4j2 创建一个 Jira 问题,我们可以在那里查看它们。 issues.apache.org/jira/browse/LOG4J2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多