1449
|
1 package goodjava.logger;
|
|
2
|
|
3 import java.io.File;
|
|
4 import java.io.FileWriter;
|
|
5 import java.io.IOException;
|
|
6
|
|
7
|
|
8 public class RollingFileAppender extends WriterAppender {
|
|
9 protected final String fileName;
|
|
10 protected final File file;
|
|
11 public long maxFileSize = 10*1024*1024;
|
|
12 public int backups = 1;
|
|
13
|
|
14 public RollingFileAppender(Layout layout,String fileName) throws IOException {
|
|
15 super(layout,null);
|
|
16 this.fileName = fileName;
|
|
17 this.file = new File(fileName);
|
|
18 open();
|
|
19 }
|
|
20
|
|
21 protected void open() throws IOException {
|
|
22 this.writer = new FileWriter(file,true);
|
|
23 }
|
|
24
|
|
25 public synchronized void append(LoggingEvent event) {
|
|
26 super.append(event);
|
|
27 if( file.length() > maxFileSize ) {
|
|
28 rollOver();
|
|
29 }
|
|
30 }
|
|
31
|
|
32 protected void rollOver() {
|
|
33 close();
|
|
34 File backup = new File(fileName+'.'+backups);
|
|
35 if( backup.exists() ) {
|
|
36 if( !backup.delete() )
|
|
37 debug("couldn't delete "+backup);
|
|
38 }
|
|
39 for( int i=backups-1; i>=1; i-- ) {
|
|
40 File f = backup;
|
|
41 backup = new File(fileName+'.'+i);
|
|
42 backup.renameTo(f);
|
|
43 }
|
|
44 if( !file.renameTo(backup) )
|
|
45 debug("couldn't rename "+file+" to "+backup);
|
|
46 try {
|
|
47 open();
|
|
48 } catch(IOException e) {
|
|
49 throw new RuntimeException(e);
|
|
50 }
|
|
51 }
|
|
52
|
|
53 protected void debug(String msg) {
|
|
54 System.err.println("RollingFileAppender: "+msg);
|
|
55 }
|
|
56 }
|