Ceki la solution ne fonctionne pas pour moi, mais semble être à mi-chemin là au moins.
Il explose car il ne peut pas voir les rolling politique lors du démarrage de l' TimeBasedFileNamingAndTriggeringPolicyBase
. Avec quelques hackery je l'ai eu à faire des coupes, et avec un peu plus je l'ai eu à observer le déclenchement, mais ensuite il s'est à nouveau parce qu'il ne pouvait pas résoudre un nom de fichier de propriétés... Le paquet est un logback alors j'ai pu obtenir quelques-uns des éléments internes, à reproduire la logique en SizeAndTimeBasedFNATP#isTriggeringEvent
et appelez - computeCurrentPeriodsHighestCounterValue
. Je pense que quelque chose le long de ces lignes pourrait fonctionner, juste pas trouvé la combinaison magique encore. J'espère vraiment que je suis en train de faire quelque chose de stupide, parce que sinon, je pense que ça va signifier l'ouverture de certains détails pour sous-classer, de les mettre directement dans logback comme une autre de roulement/déclenchement de la politique.
logback.xml: essayé différents ordres d' triggeringPolicy
, TimeBasedFileNamingAndTriggeringPolicy
à l'intérieur et à l'extérieur de l' 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>
Le déclencheur de la politique:
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;
}
}
L'exception:
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]