2016-05-22 101 views
1

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

OUTPUT与TRACE:

2016年5月23日19:24:03231的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,当前= 2016/05/23-19:24:03.230,频率= EVERY_MINUTE 2016-05-23 19 :24:03,247 http-nio-8080-exec-2调用RollingFileManager执行同步FileRenameAction [$ {0}:24:03,247 http-nio-8080-exec-2 TRACE DefaultRolloverStrategy.purge()花费15.0毫秒 2016-05-23 19:24:03,254 sys:web.root} /logs/paypal.log to $ {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调试RollingFileManag呃执行异步GzCompressAction [$ {sys:web.root} /logs/archive/paypal.log.2016-05-23-07-14 to $ {sys:web.root} /logs/archive/paypal.log.2016 -05-23-07-14.gz,deleteSource = true]

回答

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现在看在系统属性,但如果没有找到,将回落到价值在配置中定义。

+0

谢谢,我会尝试并回复 – user2908112

+0

还不知道它在哪里? – user2908112

+0

我试过〜/日志,但没有出现在我的家庭目录中。 – user2908112

0

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

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

+0

在tomcat下对吗? – user2908112

+0

我不确定你的意思。是的,只要你定义web.root系统属性,这个技术就可以在tomcat下工作。在tomcat下,如果你想让文件位于tomcat运行的地方,你也可以使用$ {sys:catalina.home}或$ {sys:catalina.base}。 – rgoers

+0

谢谢,不知道放置日志的最佳位置 – user2908112