LoginSignup
1
1

More than 5 years have passed since last update.

log4j#FileAppenderでログファイルの生成/オープンをフックしたい

Last updated at Posted at 2018-02-11

需要あるのかしらん(´・ω・`) 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で十分ですね(´・ω・`) 良いサンプルではなくてごめんなさい(´・ω・`)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1