固定文件大小的日志函数
调用时直接调用debug_log()
log文件的大小和个数都可以在debug_log函数中进行调整。
在目前的文件达到要求的大小时,下一个log文件将采用最老一个文件进行记录
这是简单的示例函数,仅仅提供参考
int debug_log(char *msg)
{
// return 0;
char *logfilename[]={"./log1.log","./log2.log","./log3.log"};
Write_Log(logfilename,3,1024*1024,msg);
return 0;
}
int Write_Log(char ** filename,int numoflogfile,int max_logfilesize,char * msg)
{
struct stat stat_buf;
int oldest_time=0x7fffffff;
char * current_log_file;
int fullflag;
int i;
FILE *fp;
int year;
time_t timer;
struct tm *tblock;
current_log_file=NULL;
for(i=0;i<numoflogfile;i++)
{
if(-1==access(filename,F_OK))
{
fclose(fopen(filename,"a+"));
current_log_file=filename;
break;
}
if(stat(filename,&stat_buf)<0)
continue;
if(stat_buf.st_size>=max_logfilesize)
{
fullflag=1;
if(oldest_time>stat_buf.st_mtime)
{
oldest_time=stat_buf.st_mtime;
current_log_file=filename;
}
}
else
{
fullflag=0;
current_log_file=filename;
break;
}
}
if(fullflag)
truncate(current_log_file,(off_t)0);
fp=fopen(current_log_file,"a+");
if(fp==NULL)
{
printf("open log file:%s failn",current_log_file);
return -1;
}
timer=time(NULL);
tblock=localtime(&timer);
year=tblock->tm_year+1900;
fprintf(fp,"%04d-%02d-%02d %02d:%02d:%02d %sn", year,tblock->tm_mon+1,tblock->tm_mday, tblock->tm_hour,tblock->tm_min,tblock->tm_sec,msg);
fclose(fp);
return 0;
}
[ 本帖最后由 ccjjhua 于 2006-6-7 10:23 编辑 ]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论