Создавайте новый файл журнала при каждом запуске моей программы - PullRequest
3 голосов
/ 01 июня 2010

Я использую библиотеку логов Apache Commons и log4j для генерации моих файлов журнала.

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

Например: program_1.log program_2.log program_3.log

Вы знаете, как мне этого добиться?

Ответы [ 7 ]

1 голос
/ 10 июня 2010

Превращение моего комментария в ответ, как и просили:

Есть причина, по которой вы не хотите использовать метку времени? Я нашел их более значимыми в качестве суффиксов, когда мне приходится оглядываться на файлы журналов.

1 голос
/ 01 июня 2010

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

Самое сложное - это знать, каков текущий счет. Вероятно, проще всего выполнить бинарный поиск по именам файлов, чтобы найти имя файла с наибольшим номером - это было бы не так уж и плохо - требовать записи журнала n для проверки существования файла, где n - это количество журналов. Если у вас есть 1 миллион журналов, это всего лишь 20 проверок файлов.

1 голос
/ 01 июня 2010

Я думаю, что это не поддерживается log4j, поэтому вы должны создать собственную реализацию, расширяющую FileAppender:

public class CustomAppender extends FileAppender {

 ...

  public
  CustomAppender(Layout layout, String filename, boolean append, boolean bufferedIO,
               int bufferSize) throws IOException {
    this.layout = layout;     
    // file name will be the basis; you should calculate the suffix yourself
    customname = filename + ...
    this.setFile(customname, append, bufferedIO, bufferSize);
  }

 ...
0 голосов
/ 06 сентября 2010

это работает для меня,

<appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender">
  <param name="Threshold" value="TRACE" />
  <param name="File" value="amLog.log"/>
  <param name="DatePattern" value="'.'YYYY-MM-dd-HH-mm"/>
  <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="%d %-5p  [%c{1}] %m %n" />
  </layout>

0 голосов
/ 01 июня 2010

Менее изящным образом, каждый раз, когда ваша программа запускается, она может создать файл log_num.dat, где будет отслеживать одно число (следующий файл журнала, который будет создан).

0 голосов
/ 01 июня 2010

Я предполагаю, что вы намереваетесь создать новый файл для каждого экземпляра JVM. Я думаю, что вы можете реализовать это (не тривиально, но не сложно), расширив FileAppender . Вы можете посмотреть на код DatedFileAppender для вдохновения.

0 голосов
/ 01 июня 2010

Кажется, что обычный Log4J не поддерживает это. Однако существует Log4J Extras Companion, содержащий собственный RollingFileAppender , который, по-видимому, можно свободно настраивать с помощью параметров RollingPolicy и TriggeringPolicy . Так что вы можете попробовать реализовать свою собственную политику.

...