【发布时间】:2012-07-02 10:27:20
【问题描述】:
我想知道是否有任何 C 的记录器库,可以进行循环文件记录?
我目前正在研究 log4C,但找不到足够的文档可以说它会进行循环日志记录。
如果有人这样做过。请告诉我。
谢谢
【问题讨论】:
我想知道是否有任何 C 的记录器库,可以进行循环文件记录?
我目前正在研究 log4C,但找不到足够的文档可以说它会进行循环日志记录。
如果有人这样做过。请告诉我。
谢谢
【问题讨论】:
这是一个例子
这是一个精简版。在我们的中,我们使用 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 );
}
}
希望对你有帮助。
戴夫
【讨论】:
您确定要循环记录吗?我认为滚动日志会更好。
即
循环记录:记录到 log.1 然后 log.2 然后 log.3 然后 log.4 然后返回 log.1
滚动日志记录:有四个日志文件,其中 log.1 始终是最新的,而 log.2,3,4 是较旧的日志条目?
【讨论】:
似乎Log4C 在这一点上没有得到很好的记录。他们确实指向 Log4J 页面,其中提到了“滚动”日志,这可能是您想要的吗?这可能只是术语混淆的问题。
【讨论】: