35if (result) {
36LogLog.debug(fileName + " -> " + scheduledFilename);
37} else {
38LogLog.error("Failed to rename [" + fileName + "] to ["
39+ scheduledFilename + "].");
40}
41try {
42this.setFile(fileName, true, this.bufferedIO, this.bufferSize);
43} catch (IOException e) {
44errorHandler.error("setFile(" + fileName + ", true) call failed.");
45}
46scheduledFilename = datedFilename;
47 }
48 protected void subAppend(LoggingEvent event) {
49long n = System.currentTimeMillis();
50if (n >= nextCheck) {
51now.setTime(n);
52nextCheck = rc.getNextCheckMillis(now);
53try {
54rollOver();
55} catch (IOException ioe) {
56if (ioe instanceof InterruptedIOException) {
57Thread.currentThread().interrupt();
58}
59LogLog.error("rollOver() failed.", ioe);
60}
61}
62super.subAppend(event);
63 }
按Log4J文档,DailyRollingFileAppender存程同步问题。不过本人木有找到哪里出问题了,望高人指点。
RollingFileAppender类
RollingFileAppender继承自FileAppender,不同于DailyRollingFileAppender是基于时间作为阀值,RollingFileAppender则是基于文件大小作为阀值。当日志文件超过指定大小,日志文件会被重命名成”日志文件名.1”,若此文件已经存在,则将此文件重命名成”日志文件名.2”,一次类推。若文件数已经超过设置的可备份日志文件最大个数,则将最旧的日志文件删除。如果要设置不删除任何日志文件,可以将maxBackupIndex设置成Integer最大值,如果这样,这里rollover()方法的实现会引起一些性能问题,因为它要冲最大值开始遍历查找已经备份的日志文件。
1 protected long maxFileSize = 10 * 1024 * 1024;
2 protected int maxBackupIndex = 1;
3 private long nextRollover = 0;
4
5 public void rollOver() {
6File target;
7File file;
8if (qw != null) {
9long size = ((CountingQuietWriter) qw).getCount();
10LogLog.debug("rolling over count=" + size);
11// if operation fails, do not roll again until
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-29497-4.html
超级喜欢你
谋求战略均衡点
还要我们其它舰开进越南