Я написал некоторый пользовательский код, чтобы найти мой RollingFileAppender
(к которому излишне сложно получить доступ в log4j!), Который я затем заставляю пролонгировать. Я адаптировал мой код ниже для одноразового использования. Я использую код, подобный этому, при запуске приложения, чтобы заставить мои журналы вращаться (если они не пустые), поэтому я всегда начинаю с нового журнала, но никогда не удаляю ни один журнал, кроме самого старого.
Этот код берет данный Logger и зацикливает иерархию logger до тех пор, пока не найдет Logger, к которому присоединены Appenders. Если это никогда не происходит, тогда это сдается. Если это так, он перебирает все Appenders, подключенные к этому Logger, и для каждого из них, являющегося RollingFileAppender, принудительно запускает журнал.
Примерно так должно быть намного проще в log4j, но я не нашел более простого способа сделать это.
public void rollLogFile(Logger logger) {
while (logger != null && !logger.getAllAppenders().hasMoreElements()) {
logger = (Logger)logger.getParent();
}
if (logger == null) {
return;
}
for (Enumeration e2 = logger.getAllAppenders(); e2.hasMoreElements();) {
final Appender appender = (Appender)e2.nextElement();
if (appender instanceof RollingFileAppender) {
final RollingFileAppender rfa = (RollingFileAppender)appender;
final File logFile = new File(rfa.getFile());
if (logFile.length() > 0) {
rfa.rollOver();
}
}
}
}