加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

linux下C语言实现写日志功能

发布时间:2020-12-15 04:56:19 所属栏目:百科 来源:网络整理
导读:先上程序,该程序经过测试能够很好的实现写日志要求 /************************************************************************* > File Name: log.c > Author: ************************************************************************/ #include #in

先上程序,该程序经过测试能够很好的实现写日志要求

/*************************************************************************

> 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 命令可以实现日志的查询,以及其他功能,不了解的话,自行查资料解决。


对上面应用不明白的请自行查资料解决。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读