Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要一个通过属性配置log4j RollingFileAppender的工作示例吗_Log4j_Rollingfileappender - Fatal编程技术网

需要一个通过属性配置log4j RollingFileAppender的工作示例吗

需要一个通过属性配置log4j RollingFileAppender的工作示例吗,log4j,rollingfileappender,Log4j,Rollingfileappender,我使用log4j进行日志记录,并使用属性文件进行配置。目前,我的日志文件太大(3.5 GB对于日志文件来说太大)。因此,我认为我需要使用RollingFileAppender,但当我这样做时,日志文件继续变得过大。我相信我只是误解了它;有人有配置RollingFileAppender的工作示例吗 我的当前配置如下所示: log4j.appender.MAIN_LOG.File=${catalina.base}/logs/webtop.log log4j.appender.MAIN_LOG=org

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

我相信我只是误解了它;有人有配置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!!!!");
        }
    }
}
请注意,我删除了对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
,它会进行适当的调整。

您的问题可能是指定了一个日期模式。 DatePattern用于DailRollingFileAppender,以指定日志文件应滚动的日期。 我不相信它可以与MaxFileSize和MaxBackupIndex属性结合使用。
Log4j允许您根据文件大小或日期滚动文件,但不能同时基于文件大小或日期滚动文件。

当我们需要每天滚动日志文件时,我们应该使用DailRollingFileAppender而不是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


首先设置
-Dlog4j.debug
JVM参数。这将打印出几行有用的调试信息,显示它找到并正在使用的配置文件,等等。这将为您提供一些出错的线索


请看

也许,事实上,我的问题比仅仅“我没有正确配置它”更复杂。我将尝试使用您提供给我的这个极好的示例,看看是否可以复制问题并从那里继续。DailyRollingFileAppender已被观察到出现同步问题和数据丢失。log4j extras companion包括新部署应考虑的备选方案,这些方案在org.apache.log4j.rolling.RollingFileAppender的文档中进行了讨论。从这里开始:
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() {
    }
}