我使用log4j进行日志记录,使用属性文件进行配置。目前,我的日志文件太大(3.5 GB对于日志文件来说太大)。所以想想我需要使用RollingFileAppender - 但是当我这样做时,日志文件继续变得过大。我相信我错误配置了它;有没有人有工作配置RollingFileAppender的例子?
为了记录,我当前的配置如下所示:
log4j.appender.MAIN_LOG.File=${catalina.base}/logs/webtop.log
log4j.appender.MAIN_LOG=org.apache.log4j.RollingFileAppender
log4j.appender.MAIN_LOG.layout=com.mycompany.util.log.Log4JSimpleLayout
log4j.appender.MAIN_LOG.DatePattern='.'yyyy-MM-dd
log4j.appender.MAIN_LOG.MaxFileSize=10MB
log4j.appender.MAIN_LOG.MaxBackupIndex=99
log4j.appender.MAIN_LOG.append=true
log4j.rootCategory=ALL, MAIN_LOG
RollingFileAppender的替代方案也是一个很好的解决方案。
答案 0 :(得分:17)
我相信我错误配置了它;有没有人有一个配置RollingFileAppender的工作示例?
这似乎对我@mcherm很好。见下文。
您确定您使用的是您认为自己的log4j.properties吗?尝试将.File
更改为另一个路径,以查看日志输出是否转到新文件。您使用的是什么版本的log4j?我正在运行1.2.15。
希望这有帮助。
我创建了以下测试程序:
package com.j256.ormlite;
import org.apache.log4j.Logger;
public class Foo {
private static Logger logger = Logger.getLogger(Foo.class);
public static void main(String[] args) {
for (int x = 0; x < 10000000; x++) {
logger.error("goodness this shouldn't be happening to us right here!!!!");
}
}
}
我的log4j.properties文件包含:
log4j.appender.MAIN_LOG=org.apache.log4j.RollingFileAppender
log4j.appender.MAIN_LOG.File=${catalina.base}/logs/webtop.log
log4j.appender.MAIN_LOG.layout=com.j256.ormlite.Log4JSimpleLayout
log4j.appender.MAIN_LOG.MaxFileSize=10MB
log4j.appender.MAIN_LOG.MaxBackupIndex=5
log4j.appender.MAIN_LOG.append=true
log4j.rootCategory=ALL, MAIN_LOG
请注意,我删除了对RollingFileAppender无效的DatePattern。我的布局是:
package com.j256.ormlite;
import org.apache.log4j.spi.LoggingEvent;
public class Log4JSimpleLayout extends org.apache.log4j.Layout {
@Override
public String format(LoggingEvent event) {
return "log message = " + event.getMessage().toString() + "\n";
}
@Override
public boolean ignoresThrowable() {
return true;
}
public void activateOptions() {
}
}
使用-Dcatalina.base=/tmp/
运行我在/tmp/logs/
中获取的文件达到索引#5并且大小为10mb。如果我调整MaxFileSize
或MaxBackupIndex
,则会进行适当调整。
答案 1 :(得分:5)
您的问题可能在于您指定了DatePattern。 DatePattern旨在与DailyRollingFileAppender一起使用,以指定日志文件应滚动的日期。 我不相信它可以与MaxFileSize和MaxBackupIndex属性一起使用。 Log4j允许您根据文件大小或日期滚动文件,但不能同时滚动文件。
答案 2 :(得分:2)
当我们需要每天滚动日志文件时,我们应该使用DailyRollingFileAppender而不是RollingFileAppender。 您不需要指定MaxFileSize限制,只有DatePattern足以根据频率滚动文件。 我已经在log4j.properties文件中尝试了以下配置,以便每分钟滚动日志文件。
log4j.appender.infoAppender = org.apache.log4j.DailyRollingFileAppender
log4j.appender.infoAppender.Threshold = INFO
log4j.appender.infoAppender.DatePattern = '' yyyy-MM-dd HH-mm
log4j.appender.infoAppender.File = C:/logs/info.log
答案 3 :(得分:0)
首先设置-Dlog4j.debug
JVM参数。这会打印出一些有用的调试信息,显示它找到并正在使用的配置文件等。这应该可以为你提供一些线索来解决问题。