View | Details | Raw Unified | Return to bug 41735
Collapse All | Expand All

(-)src/java/org/apache/log4j/RollingFileAppender.java (-4 / +23 lines)
Lines 124-146 Link Here
124
    }
124
    }
125
    LogLog.debug("maxBackupIndex="+maxBackupIndex);
125
    LogLog.debug("maxBackupIndex="+maxBackupIndex);
126
126
127
    boolean renameSucceeded = true;
127
    // If maxBackups <= 0, then there is no file renaming to be done.
128
    // If maxBackups <= 0, then there is no file renaming to be done.
128
    if(maxBackupIndex > 0) {
129
    if(maxBackupIndex > 0) {
129
      // Delete the oldest file, to keep Windows happy.
130
      // Delete the oldest file, to keep Windows happy.
130
      file = new File(fileName + '.' + maxBackupIndex);
131
      file = new File(fileName + '.' + maxBackupIndex);
131
      if (file.exists())
132
      if (file.exists())
132
       file.delete();
133
       renameSucceeded = file.delete();
133
134
134
      // Map {(maxBackupIndex - 1), ..., 2, 1} to {maxBackupIndex, ..., 3, 2}
135
      // Map {(maxBackupIndex - 1), ..., 2, 1} to {maxBackupIndex, ..., 3, 2}
135
      for (int i = maxBackupIndex - 1; i >= 1; i--) {
136
      for (int i = maxBackupIndex - 1; i >= 1 && renameSucceeded; i--) {
136
	file = new File(fileName + "." + i);
137
	file = new File(fileName + "." + i);
137
	if (file.exists()) {
138
	if (file.exists()) {
138
	  target = new File(fileName + '.' + (i + 1));
139
	  target = new File(fileName + '.' + (i + 1));
139
	  LogLog.debug("Renaming file " + file + " to " + target);
140
	  LogLog.debug("Renaming file " + file + " to " + target);
140
	  file.renameTo(target);
141
	  renameSucceeded = file.renameTo(target);
141
	}
142
	}
142
      }
143
      }
143
144
145
    if(renameSucceeded) {
144
      // Rename fileName to fileName.1
146
      // Rename fileName to fileName.1
145
      target = new File(fileName + "." + 1);
147
      target = new File(fileName + "." + 1);
146
148
Lines 148-156 Link Here
148
150
149
      file = new File(fileName);
151
      file = new File(fileName);
150
      LogLog.debug("Renaming file " + file + " to " + target);
152
      LogLog.debug("Renaming file " + file + " to " + target);
151
      file.renameTo(target);
153
      renameSucceeded = file.renameTo(target);
154
      //
155
      //   if file rename failed, reopen file with append = true
156
      //
157
      if (!renameSucceeded) {
158
          try {
159
            this.setFile(fileName, true, bufferedIO, bufferSize);
160
          }
161
          catch(IOException e) {
162
            LogLog.error("setFile("+fileName+", true) call failed.", e);
163
          }
164
      }
152
    }
165
    }
166
    }
153
167
168
    //
169
    //   if all renames were successful, then
170
    //
171
    if (renameSucceeded) {
154
    try {
172
    try {
155
      // This will also close the file. This is OK since multiple
173
      // This will also close the file. This is OK since multiple
156
      // close operations are safe.
174
      // close operations are safe.
Lines 159-164 Link Here
159
    catch(IOException e) {
177
    catch(IOException e) {
160
      LogLog.error("setFile("+fileName+", false) call failed.", e);
178
      LogLog.error("setFile("+fileName+", false) call failed.", e);
161
    }
179
    }
180
    }
162
  }
181
  }
163
182
164
  public
183
  public

Return to bug 41735