Rolling log Файлы и удаление старых файлов журналов
Я работаю над приложением на базе Java SOAP на основе webservice, где я пишу stdout в текстовый файл в качестве журнала для нашей справки. Этот файл сильно растет, поэтому мне нужно проверить размер файла... Например, если размер файла пересекает 10 МБ, мне нужно создать другой файл.
Таким образом, я должен создать 10 файлов, вращающихся один за другим до десяти файлов. После достижения десяти файлов мне нужно удалить стартовые файлы и снова начать создавать...
Как удалить файлы после no. файлов будет 10?
Ответы
Ответ 1
Я использую logback для этого. Ниже приведен пример скользящей политики, основанной на времени. В зависимости от того, сколько данных будет выводиться во время ваших журналов, это может работать для вас как есть.
Кроме того, в качестве бонуса мой файл конфигурации отправляет журнал в HTML, чтобы упростить просмотр для типов управления, которые хотят просмотреть файл журнала.
Соответствующая часть файла конфигурации:
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs\logFile.html</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -- >
<fileNamePattern>logs\logFile.%d{yyyy-MM-dd}.%i.html</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- or whenever the file size reaches 10MB -- >
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- keep 10 days' worth of history -- >
<maxHistory>10</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<charset>UTF-8</charset>
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<pattern>%d{HH:mm:ss.SSS}%thread%level%logger%line%msg</pattern>
</layout>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
Соответствующие зависимости Maven:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.0.12</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.12</version>
</dependency>
Ответ 2
Я вижу много ответов, говорящих вам использовать Log4J, но вы можете использовать собственный регистратор Java, чтобы сделать это, просто создав FileHandler:
Handler handler =
new FileHandler("%h/MyService-%g.log", 10 * 1024 * 1024, 10);
handler.setLevel(Level.ALL);
Logger.getLogger("").addHandler(handler);
Ответ 3
В log4j.xml вы можете попробовать следующее:
<appender name="fileappender" class="org.apache.log4j.RollingFileAppender">
<param name="file" value="applog.log"/>
<param name="Append" value="true" />
<param name="MaxBackupIndex" value="10"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n"/>
</layout>
</appender>
Значение говорит log4j.xml хранить только 10 файлов журналов с оборотами.
В качестве альтернативы, если вы используете файл свойств (вместо xml)
log4j.appender.File=org.apache.log4j.RollingFileAppender
log4j.appender.File.File=applog.log
log4j.appender.File.Append=true
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c] %m%n
log4j.appender.[appenderName].MaxBackupIndex = 10
Ответ 4
Большинство фреймворков регистрации обеспечивают то, что вы ищете.
В logback вы сможете достичь этого, правильно настроив RollingFileAppender:
RollingFileAppender расширяет FileAppender возможностью хранения файлов журнала опроса. Например, RollingFileAppender может подключиться к файлу с именем log.txt, и после выполнения определенного условия измените его цель ведения журнала на другой файл.
и
RollingPolicy отвечает за процедуру опрокидывания, которая связана с перемещением и переименованием файлов.
http://logback.qos.ch/manual/appenders.html
Ответ 5
Log4j может это сделать. В частности, класс RollingFileAppender.
Ответ 6
Если вы используете java.util.logging.Logger
, вы можете сделать это с помощью FileHandler
.
Источник: kodejava
package org.kodejava.example.logging;
import java.util.logging.Logger;
import java.util.logging.FileHandler;
import java.util.logging.SimpleFormatter;
import java.io.IOException;
public class RollingLogFile {
//
// Set a small log file size to demonstrate the rolling log files.
//
public static final int FILE_SIZE = 1024;
public static void main(String[] args) {
Logger logger = Logger.getLogger(RollingLogFile.class.getName());
try {
//
// Creating an instance of FileHandler with 5 logging files
// sequences.
//
FileHandler handler = new FileHandler("myapp.log", FILE_SIZE, 5, true);
handler.setFormatter(new SimpleFormatter());
logger.addHandler(handler);
logger.setUseParentHandlers(false);
} catch (IOException e) {
logger.warning("Failed to initialize logger handler.");
}
logger.info("Logging information message.");
logger.warning("Logging warning message.");
}
}