Круговая регистрация файлов - PullRequest
4 голосов
/ 04 марта 2009

Хотелось бы узнать, есть ли какие-нибудь библиотеки логгеров для C, которые могут вести циклическую регистрацию файлов?

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

если кто-то сделал это. пожалуйста, дайте мне знать.

Спасибо

Ответы [ 3 ]

2 голосов
/ 04 марта 2009

вот пример

Это урезанная версия. В наших мы используем vargs и форматируем их перед вызовом log_it.


typedef const char* c_str;
FILE* log_fp = 0;
const int max_log_size = 4 * 1024 * 1024;
const int max_no = 5;
c_str prefix = "logs_";
c_str postfix = ".txt";

void log_it( c_str str )
    {
    char file1[100], file2[100];

    if( ! log_fp )
        {
        sprintf( file1 "%s%d%s", prefix, 0, postfix );
        log_fp = fopen( file1, "a" );
        }

    if( log_fp )
        {
        if( ftell( log_fp ) > max_log_size )
            {
            fclose( log_fp );
            log_fp = 0;

            for( int i = (max_no - 1); i >= 0; i-- )
                {
                sprintf( file1 "%s%d%s", prefix, i, postfix );
                sprintf( file1 "%s%d%s", prefix, i+1, postfix );
                rename( file1, file2 );
                }

            sprintf( file1 "%s%d%s", prefix, 0, postfix );
            log_fp = fopen( file1, "a" );
            }

        fputs( str, log_fp );
        fflush( log_fp );
        }
    }

Надеюсь, это поможет.

1012 * Дэйв *

1 голос
/ 04 марта 2009

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

т.е.

циклическое ведение журнала: войдите в log.1, затем log.2, затем log.3, затем log.4, затем верните log.1

непрерывное ведение журнала: есть четыре файла журнала, где log.1 всегда самая последняя, ​​а log.2,3,4 - более старые записи журнала?

0 голосов
/ 04 марта 2009

Кажется, Log4C не очень хорошо документировано на данный момент. Тем не менее, они указывают на страницу Log4J, в которой упоминаются «скользящие» журналы, возможно, это то, что вы хотите? Это может быть просто вопрос путаницы в терминологии.

...