Rolling log Файлы и удаление старых файлов журналов - программирование
Подтвердить что ты не робот

Rolling log Файлы и удаление старых файлов журналов

Я работаю над приложением на базе Java SOAP на основе webservice, где я пишу stdout в текстовый файл в качестве журнала для нашей справки. Этот файл сильно растет, поэтому мне нужно проверить размер файла... Например, если размер файла пересекает 10 МБ, мне нужно создать другой файл.

Таким образом, я должен создать 10 файлов, вращающихся один за другим до десяти файлов. После достижения десяти файлов мне нужно удалить стартовые файлы и снова начать создавать...

Как удалить файлы после no. файлов будет 10?

4b9b3361

Ответ 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

Ответ 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.");
    }
}