需要あるのかしらん(´・ω・`) FileAppender
においてログファイルが生成あるいはopenされるタイミングをフックしたい場合、FileAppender
を継承しsetFile
をオーバライドしたクラスをlog4j.Appender
に指定します。
たとえば日付ごとにログファイルを切り替えたいという場合、より具体的には2018年02月11日のログであればsample.log.20180211
、2018年02月12日のログであればsample.log.20180212
に記録したいという場合は以下のような独自ファイルとlog4j.properties
を用意します。
log4j.properties
log4j.logger.sample=DEBUG, SAMPLE
log4j.appender.SAMPLE=sample.logger.SampleFileAppender
log4j.appender.SAMPLE.File=C:\\logging\\sample.log
log4j.appender.SAMPLE.Append=true
log4j.appender.SAMPLE.layout=org.apache.log4j.PatternLayout
log4j.appender.SAMPLE.layout.ConversionPattern=%d %p %m %n
SampleFileAppender.java
package sample.logger;
import org.apache.log4j.FileAppender;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class SampleFileAppender extends FileAppender {
@Override
synchronized public void setFile(String fileName, boolean append, boolean bufferedIO, int bufferSize) throws IOException {
Path path = Paths.get(fileName);
String baseName = path.getFileName() + "." + DateTimeFormatter.ofPattern("yyyyMMdd").format(LocalDate.now());
super.setFile(Paths.get(path.getParent().toString(), baseName).toString(), append, bufferedIO, bufferSize);
}
}
よくよく考えると、この用途であればDailyRollingFileAppender
で十分ですね(´・ω・`) 良いサンプルではなくてごめんなさい(´・ω・`)