Ответ 1
Если вы установите для параметра append
значение false
, файл основного журнала будет "запущен свежим", когда приложение перезагрузится. Вы хотите, чтобы вы также удаляли любые "скрученные" файлы журналов?
Я хочу, чтобы журнал загружался до тех пор, пока приложение запущено, но я хочу, чтобы журнал начинал новый, когда приложение перезагружается.
Обновлено: На основе отзывов erickson мой appender выглядит так:
<appender name="myRFA" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="my-server.log"/>
<param name="Append" value="false" />
<param name="MaxFileSize" value="10MB"/>
<param name="MaxBackupIndex" value="10"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{ISO8601} %p - %t - %c - %m%n"/>
</layout>
</appender>
Я просто добавил следующую строку:
<param name="Append" value="false" />
Теперь он обрезает файл основного журнала при запуске, но он оставляет только свернутые файлы.
Если вы установите для параметра append
значение false
, файл основного журнала будет "запущен свежим", когда приложение перезагрузится. Вы хотите, чтобы вы также удаляли любые "скрученные" файлы журналов?
Я написал какой-то пользовательский код, чтобы найти мой RollingFileAppender
(с которым нет необходимости в доступе в log4j!), который затем я могу перевернуть. Я адаптировал свой код ниже для одного использования. Я использую код, подобный этому при запуске приложения, чтобы заставить мои журналы катиться (если не пуст), поэтому я всегда начинаю в новом журнале, но никогда не удаляю ни одного журнала, кроме самого старого.
Этот код принимает заданный 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();
}
}
}
}