Ниже приведена прямая конфигурация 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>
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
Поэтому я думаю, что конфигурация журнала работает правильно. Надеюсь это поможет!