固定文件大小的日志函数

发布于 2022-07-21 05:51:53 字数 5416 浏览 8 评论 0

调用时直接调用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文