我有以下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]
答案 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建议的那样,启用跟踪将明确告诉您创建它的位置。