I have created an appender that create and write logs to file with current date in filename, like this:
filename_18052014.log
The problem is that my appender should create new file at 00:00:00 every day and write logs there. But it doesn't happen, it still writes to old file and new file is not created...
My code:
package com.comarch.log4j;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.log4j.FileAppender;
public class DateFormatFileAppender extends FileAppender {
private String fileName = "";
public DateFormatFileAppender() {
setFile("");
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public void setFile(String fileName, boolean append, boolean bufferedIO, int bufferSize) throws IOException {
super.setFile(generateFileName(), append, bufferedIO, bufferSize);
}
private String generateFileName() {
SimpleDateFormat df = new SimpleDateFormat("ddMMyyyy");
String dateString = df.format(new Date());
return String.format("%s_%s.log", getFileName(), dateString);
}
}
Have you any idea, how to do it?
What do you think about this solution? Method append is extended.
package com.comarch.log4j;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.log4j.FileAppender;
public class DateFormatFileAppender extends FileAppender {
private String fileName = "";
private int day;
public DateFormatFileAppender() {
setFile("");
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public void setFile(String fileName, boolean append, boolean bufferedIO, int bufferSize) throws IOException {
if (!getFile().equals(""))
super.setFile(fileName, append, bufferedIO, bufferSize);
}
public void append(LoggingEvent event) {
if (Calendar.DAY_OF_MONTH != day) {
setFile(generateFileName());
activateOptions();
}
super.append(event);
}
private String generateFileName() {
SimpleDateFormat df = new SimpleDateFormat("ddMMyyyy");
String dateString = df.format(new Date());
return String.format("%s_%s.log", getFileName(), dateString);
}
}