12

我正在使用 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 的替代方案也是一个很好的解决方案。

4

4 回答 4

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。如果我调整MaxFileSizeMaxBackupIndex,它会适当调整。

于 2010-09-29T17:59:38.040 回答
5

您的问题可能在于您指定了 DatePattern。DatePattern 旨在与 DailyRollingFileAppender 一起使用,以指定日志文件应滚动的日期。我不相信它可以与 MaxFileSize 和 MaxBackupIndex 属性一起使用。Log4j 允许您根据文件大小或日期滚动文件,但不能同时基于两者。

于 2010-11-03T15:10:08.647 回答
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

于 2011-06-01T10:11:40.397 回答
0

首先设置-Dlog4j.debugJVM 参数。这会打印出一些有用的调试信息行,显示它找到并正在使用的配置文件等。这应该为您提供一些关于出现问题的线索。

http://logging.apache.org/log4j/1.2/manual.html

于 2013-04-24T08:39:07.230 回答