log4j 怎么实现日志文件滚动更新_自动化采集日志出现问题,log4j无法滚动生成日志...

本文探讨了log4j配置日志文件滚动更新的问题,程序A使用RollingFileAppender设置每个日志文件2MB大小,但程序B在自动采集日志时导致日志文件未按预期滚动,反而达到了10MB。分析了可能的原因并寻求解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,程序a会滚动生成日志文件,日志配置的方式是 限定每一个日志文件的大小是2MB,使用到的日志API是

org.apache.log4j.RollingFileAppender 也就是说可以滚动生成日志,每一个日志文件的大小在2MB左右

配置文件的内容如下:

log4j.rootLogger=info,A2

log4j.appender.A2=org.apache.log4j.RollingFileAppender

log4j.appender.A2.File= D:/temfile/test.log

log4j.appender.A2.MaxFileSize=2MB

log4j.appender.A2.maxBackupIndex=10

#log4j.appender.A2.MaxBackupIndex=100

log4j.appender.A2.layout=org.apache.log4j.PatternLayout

log4j.appender.A2.layout.ConversionPattern=[%p] %-d{yyyy-MM-dd HH:mm:ss} [%c %M] %m%n

程序a启动之后生成的日志文件如下:

d4e1365bdd7758d9d7427e75a6f2f528.png

从这里可以看出,日志文件确实滚动生成了,每一个文件的大小大约在2MB左右。

程序a生成日志的代码是通过while(true) 停隔一段时间不断logInfo,,从而可以模拟日志的生成。

2, 程序B启动之后会 每隔20秒中, 到指定的日志文件的存放目录 d:tmpfile 到该目录下寻找所有的 符合 test.log.数字 这种格式命命名的文件,然后 过滤出来

File[] listFiles = file.listFiles(new FileFilter())

将过滤得到的文件(这些文件的文件名中都带有数字)移动到另一个文件夹 d:backupUpload 下并且更改名称为

原文件名称+系统当前时间, 移动之后将 d:backupUpload 下的所有文件上传到某一个服务器。

程序B的逻辑代码如下:

//定时执行任务

service.scheduleAtFixedRate(new Runnable() {

@Override

public void run() {

File file = new File("D:\\temfile"); // 注意这个地方,代码2

File[] listFiles = file.listFiles(new FileFilter() {

@Override

public boolean accept(File pathname) {

// TODO Auto-generated method stub

System.out.println(pathname);

if (pathname.getName().startsWith("test.log.")) {

return true;

}

return false;

}

});

List listFile = new ArrayList();

for (File fileItem : listFiles) {

if (fileItem.canWrite()) {

// 如果文件可写,那么表示文件当前没有正在被log4j日志系统操作

File newFile = new File(

"D:\\backupUpload \\" + fileItem.getName() + System.currentTimeMillis());

fileItem.renameTo(newFile);

listFile.add(newFile);

}

}

try {

//上传到另一个服务器

} catch (IOException ) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}, 01, 20000, TimeUnit.MILLISECONDS);

3,运行的效果是:

首先启动程序A,然后会接连 间隔一小会 生成10个文件,然后如果再生成日志文件就会自动丢弃之前的日志文件

然后启动程序B,程序B在一启动的时候会迅速将 指定的日志目录D:\temfile下符合条件的文件移动到另一个目录"D:\backupUpload ,并上传文件。

此时因为文件被移动了,所以原日志目录下就只剩下了 test.log文件

12745590738eff0c25c27490d68acf82.png

4问题: 就如上面图片中提到的问题,为什么 test.log日志文件的大小会有10MB多,我不是已经配置过日志文件的大小上限了吗? 从上面的图片我们看到此时log日志文件并没有滚动生成。

请问谁可以帮忙解释一下吗?thanks

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值