Logback усекается вместо добавления в файл журнала

1

Ниже приведена прямая конфигурация Logback. Мое ожидание заключается в том, что приложение будет продолжать записывать (т.е. добавлять) в файл журнала при запуске. Однако при перезапуске приложения существующий файл отбрасывается, и регистратор создает новый файл. Я понимаю, что FileAppender по умолчанию присоединяется к файлу журнала. Даже добавление "истины" не имеет значения. Я что-то упускаю?

<configuration>
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <append>true</append>
    <File>${logDir}/${filename}.log</File>
    <encoder>
      <pattern>%d{yyyyMMdd-HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
    <appender-ref ref="FILE" />
  </appender>

  <root level="INFO">
    <appender-ref ref="ASYNC"/>
  </root>
</configuration>
  • 1
    Это помогает? logback.qos.ch/apidocs/ch/qos/logback/core/rolling/...
  • 0
    Спасибо vikingsteve - я не хочу внедрять скользящую политику, основанную на времени или размере. Просто нужно добавить файл вместо усечения и записи в файл при запуске. В RollingFileAppender я не вижу ничего, что можно было бы использовать без написания собственного приложения.
Теги:
logback

1 ответ

-2

Luhar,

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

Используя следующую конфигурацию журнала и сопроводительный код, я смог просто добавить в файл журнала.

<configuration>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <File>test.log</File>
        <encoder>
            <pattern>%d{yyyyMMdd-HH:mm:ss.SSS} [%thread] %-5level %logger{36} -
                %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="FILE" />
    </appender>
    <root level="INFO">
        <appender-ref ref="ASYNC" />
    </root>
</configuration>

Простой класс Java с использованием приведенной выше конфигурации:

public class App {

    static Logger logger = LoggerFactory.getLogger("SimpleTest");

    public static void main(String[] args) {
        logger.info("This is an INFO statement");
        logger.warn("This is a WARN statement");
        logger.error("This is an ERROR statement");

        try {
            Thread.sleep(2000);     
            // make sure the AsyncAppender queue is flushed
            // before program exits
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Ниже приведен мой файл журнала после 3 запусков программы.

20141222-22: 32: 10.391 [main] INFO SimpleTest - это выражение INFO

20141222-22: 32: 10.393 [main] WARN SimpleTest - это выражение WARN

20141222-22: 32: 10.393 [main] ОШИБКА SimpleTest - это оператор ERROR

20141222-22: 32: 18.558 [main] INFO SimpleTest - это выражение INFO

20141222-22: 32: 18.560 [main] WARN SimpleTest - это выражение WARN

20141222-22: 32: 18.560 [main] ERROR SimpleTest - это оператор ERROR

20141222-22: 32: 23.192 [main] INFO SimpleTest - это выражение INFO

20141222-22: 32: 23.194 [main] WARN SimpleTest - это выражение WARN

20141222-22: 32: 23.194 [main] ERROR SimpleTest - это оператор ERROR

Поэтому я думаю, что конфигурация журнала работает правильно. Надеюсь это поможет!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню