2010-06-01 3 views
3

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

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

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

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

+2

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

+0

Это было бы также решением ... – 2010-06-02 06:57:30

+0

Benjamin Oakes, теперь я использую временную метку. Сделайте свой комментарий к ответу, чтобы я мог отметить его как правильный. – 2010-06-02 07:13:24

ответ

1

Повернувшись мой комментарий в ответ, в соответствии с просьбой:

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

+0

Теперь я использую TimestampFileAppender (http://markmail.org/message/5on2bmatywehnbn7). – 2010-06-11 05:13:40

0

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

0

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

1

Я думаю, что это не поддерживается 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

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

1

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

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

0

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

<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> 

 Смежные вопросы

  • Нет связанных вопросов^_^