循环文件记录

时间:2009-03-04 09:26:41

标签: c logging

我想知道C是否有任何记录器库,可以进行循环文件记录?

我目前正在查看log4C,但无法找到足够的文档,可以说它会进行循环日志记录。

如果有人这样做了。请让我知道。

由于

3 个答案:

答案 0 :(得分:2)

这是一个例子

这是一个减少版本。我们在调用log_it之前使用vargs并格式化它们。


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 );
        }
    }

我希望有所帮助。

戴夫

答案 1 :(得分:1)

你真的确定要循环记录吗?我认为滚动日志会更好。

循环日志记录:登录到log.1然后登录log.2然后登录log.3然后登录log.4然后登录log.1

滚动日志记录:有四个日志文件,其中log.1始终是最新的,log.2,3,4是较旧的日志条目?

答案 2 :(得分:0)

此时似乎Log4C没有得到充分的记录。他们确实指向Log4J页面,其中提到“滚动”日志,这可能是你想要的?这可能只是术语混淆的问题。