Давно не писал, но тут накипело. Читал буквально позавчера статью
Модульный дизайн, или «что такое DIP, SRP, IoC, DI и т.п.». Вот там говориться про великий Log4j, какой он распрекрасный. И вот понадобилось мне сделать header для файлов. Такой вот конфиг:
- <appender name="eventhistoryfile" class=" org.apache.log4j.RollingFileAppender">
- <param name="LogFileName" value="${log4j.file.name}"/>
-
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="${log4j.pattern}"/>
- </layout>
- </appender>
Очень простой.. Как добавить хедер? Оказывается
PatternLayout содержит пустую реализацию метода
getHeader. Ну и как это называется??? Ладно, сделал свой, который добавляет эту функциональность, не сложно.
Идём дальше. Запустил, работает. Вырубил приложение, запустил ещё раз появился ещё один header в файле О_о я нахожусь в шоке. Пришлось ещё наследоваться от
RollingFileAppender и переопределять у него метод
writeHeader, чтобы header в файл писался один раз (код взят в исходном
FileAppender только добавлена последняя проверка).
- @Override
- protected void writeHeader() {
- if (this.layout == null) {
- return;
- }
- String header = layout.getHeader();
- if (header == null && this.qw == null) {
- return;
- }
- File f = new File(this.getFile());
- if (!f.exists() || (f.exists() && f.length() == 0)) {
- this.qw.write(header);
- }
- }
Вообщем,
негодую.