Linux 打印可变参数日志

实现了传输进去的字符串所在的文档,函数和行数显示功能。

实现了将传入的可变参数打印到日志功能。

1#include<stdio.h> 2#include<stdarg.h> 3#include<string.h> 4 5const char * g_path = "/home/exbot/wangqinghe/log.txt"; 6#define LOG(fmt,...) my_fprintf(__FILE__,__FUNCTION__,__LINE__,fmt,##__VA_ARGS__) 7 8int my_fprintf(const char *pFileName,const char *pFunName,const long lLine,const char* fmt,...) 9{ 10 printf("%s-%s-%d\n",__FILE__,__FUNCTION__,__LINE__); 11 int iRet = -1; 12 int i = 0; 13 va_list args; 14 va_start(args,fmt); 15 FILE* fp = NULL; 16 fp = fopen(g_path,"at+"); 17 18 int nFileNameLen = strlen(pFileName); 19 char szLine[10] = {0}; 20 sprintf(szLine,"%ld",lLine); 21 int nLineLen = strlen(szLine); 22 int nSpaceLen = 30 - nFileNameLen - nLineLen; 23 for(i = 0; i < nSpaceLen; ++i) 24 { 25 fwrite(" ",1,1,fp); 26 } 27 fprintf(fp,"%s:%ld ",pFileName,lLine); 28 iRet = vfprintf(fp,fmt,args); 29 printf("iRet = %d\n",iRet); 30 va_end(args); 31 fflush(fp); 32 fclose(fp); 33 return iRet; 34} 35 36 37int main() 38{ 39 char *p = "this is my first debug"; 40 printf("%s-%s-%d\n",__FILE__,__func__,__LINE__); 41 LOG("%s %d\n",p,1); 42 return 0; 43}

输出结果:

exbot@ubuntu:~/wangqinghe/C/20190703$ gcc log.c -o log

exbot@ubuntu:~/wangqinghe/C/20190703$ ./log

log.c-main-41

log.c-my_fprintf-10

iRet = 25

在/home/exbot/wangqinghe/log.txt中有如下输出结果:

简单化版:

1#include<stdio.h> 2#include<stdarg.h> 3#include<string.h> 4 5const char * g_path = "/home/exbot/wangqinghe/log.txt"; 6#define LOG(fmt,...) my_fprintf(__FILE__,__FUNCTION__,__LINE__,fmt,##__VA_ARGS__) 7 8int my_fprintf(const char *pFileName,const char *pFunName,const long lLine,const char* fmt,...) 9{ 10 printf("%s-%s-%d\n",__FILE__,__FUNCTION__,__LINE__); 11 int iRet = -1; 12 int i = 0; 13 va_list args; 14 va_start(args,fmt); 15 FILE* fp = NULL; 16 fp = fopen(g_path,"at+"); 17 fprintf(fp,"%s:%ld ",pFileName,lLine); 18 iRet = vfprintf(fp,fmt,args); //使用参数列表发送格式化输出到流stream中 19 printf("iRet = %d\n",iRet); 20 va_end(args); 21 fflush(fp); 22 fclose(fp); 23 return iRet; 24} 25 26 27int main() 28{ 29 char *p = "this is my first debug"; 30 printf("%s-%s-%d\n",__FILE__,__func__,__LINE__); 31 LOG("%s %d\n",p,1); 32 //getchar(); 33 return 0; 34}

输出结果:

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

一篇文章带你了解JavaScript日期

日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用