linux下C语言实现写日志功能
先上程序,该程序经过测试能够很好的实现写日志要求 /************************************************************************* > File Name: log.c > Author: ************************************************************************/ #include #include #include #include #include #include #include #include #include int safe_asprintf(char **strp,const char *fmt,...); int safe_vasprintf(char **strp,va_list ap); void plog(const char *format,...) ; void pinfo(const char *format,...) ; #define DEBUG #ifdef DEBUG void plog(const char *format,...); void pinfo(const char *format,...); #define debug(fmt,args...) plog(fmt,##args) #else #define debug(fmt,args...) do{}while(0) #endif static pthread_mutex_t fileMutex = PTHREAD_MUTEX_INITIALIZER; int main(int argc,char *argv) { return 0; } /* * safe_asprintf(); */ int safe_asprintf(char **strp,...) { va_list ap; int retval; va_start(ap,fmt); retval = safe_vasprintf(strp,fmt,ap); va_end(ap); return retval; } /* * safe_vasprintf(); */ int safe_vasprintf(char **strp,va_list ap) { int retval; retval = vasprintf(strp,ap); if (retval == -1) { printf("Failed to vasprintf: %s. Bailing outn",strerror(errno)); return 1; } return retval; } /* * plog(); */ void plog(const char *format,...) { pthread_mutex_lock(&fileMutex); FILE *fp = NULL; va_list vlist; char *fmt = NULL; // Open debug info output file. if (!(fp = fopen("log.txt","a+"))) { pthread_mutex_unlock(&fileMutex); return; } va_start(vlist,format); safe_vasprintf(&fmt,format,vlist); va_end(vlist); if (!fmt) { pthread_mutex_unlock(&fileMutex); return; } time_t timep; struct tm *ptm = NULL; time(&timep); ptm = localtime(&timep); fprintf(fp,"[%04d-%02d-%02d-%02d-%02d-%02d] %s", ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec, fmt); free(fmt); fsync(fileno(fp)); fclose(fp); pthread_mutex_unlock(&fileMutex); } /* * pinfo(); */ void pinfo(const char *format,vlist); va_end(vlist); if (!fmt) { pthread_mutex_unlock(&fileMutex); return; } fprintf(fp,"%s",fmt); free(fmt); fsync(fileno(fp)); fclose(fp); pthread_mutex_unlock(&fileMutex); } 程序实现的日志格式为: 时间 + 空格 + 具体实现(自己的调试内容) 本段程序值得学习的地方: va_list 结构体的使用 linux 的格式化输出字符串 文件操作过程中pthread_mutex锁的使用,以及他的优点 linux DEBUG 的应用,方便调试 linux如何查看日志: 使用tail 命令可以实现日志的查询,以及其他功能,不了解的话,自行查资料解决。 对上面应用不明白的请自行查资料解决。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |