Решение Ceki, похоже, не работает для меня, но, по крайней мере, похоже, частично.
Он взрывается, потому что не может видеть скользящую политику при запуске TimeBasedFileNamingAndTriggeringPolicyBase
. С некоторой хакерской атакой я заставил его выполнить некоторую регистрацию, а с помощью некоторого другого я заставил его наблюдать за триггером, но затем он снова сломался, потому что не смог разрешить одно из свойств имени файла ... можно было бы добраться до некоторых внутренних устройств, скопировать часть логики в SizeAndTimeBasedFNATP#isTriggeringEvent
и вызвать computeCurrentPeriodsHighestCounterValue
. Я думаю, что-то в этом роде может сработать, но пока не нашел волшебную комбинацию. Я действительно надеюсь, что делаю что-то глупое, потому что в противном случае я думаю, что это будет означать либо раскрытие некоторых деталей для создания подклассов, либо внесение этого прямо в logback в качестве другой скользящей / запускающей политики.
logback.xml: пробовал различные порядки triggeringPolicy
, TimeBasedFileNamingAndTriggeringPolicy
внутри и снаружи rollingPolicy
.
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/${LOG_FILE_BASE}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/${LOG_FILE_BASE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<MaxHistory>7</MaxHistory>
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.RollOnStartupPolicy" />
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
Политика триггера:
package ch.qos.logback.core.rolling;
public class RollOnStartupPolicy<E> extends SizeAndTimeBasedFNATP<E> {
private final AtomicBoolean firstTime = new AtomicBoolean(true);
@Override
public boolean isTriggeringEvent(File activeFile, E event) {
if (!firstTime.get()) { // fast path
return false;
}
if (firstTime.getAndSet(false)) {
return true;
}
return false;
}
}
Исключение:
java.lang.NullPointerException
at at ch.qos.logback.core.rolling.TimeBasedFileNamingAndTriggeringPolicyBase.start(TimeBasedFileNamingAndTriggeringPolicyBase.java:46)
at at ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP.start(SizeAndTimeBasedFNATP.java:36)
at at ch.qos.logback.core.joran... [snip joran config]