搜尋

首頁  >  問答  >  主體

java - 自动化采集日志出现问题,log4j无法滚动生成日志

1,程序a会滚动生成日志文件,日志配置的方式是 限定每一个日志文件的大小是2MB,使用到的日志API是
org.apache.log4j.RollingFileAppender 也就是说可以滚动生成日志,每一个日志文件的大小在2MB左右

配置文件的内容如下:

1

2

3

4

5

6

7

8

<code>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</code>

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

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

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

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

将过滤得到的文件(这些文件的文件名中都带有数字)移动到另一个文件夹 d:backupUpload 下并且更改名称为
原文件名称+系统当前时间, 移动之后将 d:backupUpload 下的所有文件上传到某一个服务器。

程序B的逻辑代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

<code>//定时执行任务

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<File> 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);

</code>

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

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

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

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

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

黄舟黄舟2808 天前817

全部回覆(0)我來回復

無回覆
  • 取消回覆