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

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

#include<stdio.h>
#include<stdarg.h>
#include<string.h> const char * g_path = "/home/exbot/wangqinghe/log.txt";
#define LOG(fmt,...) my_fprintf(__FILE__,__FUNCTION__,__LINE__,fmt,##__VA_ARGS__) int my_fprintf(const char *pFileName,const char *pFunName,const long lLine,const char* fmt,...)
{
printf("%s-%s-%d\n",__FILE__,__FUNCTION__,__LINE__);
int iRet = -;
int i = ;
va_list args;
va_start(args,fmt);
FILE* fp = NULL;
fp = fopen(g_path,"at+"); int nFileNameLen = strlen(pFileName);
char szLine[] = {};
sprintf(szLine,"%ld",lLine);
int nLineLen = strlen(szLine);
int nSpaceLen = - nFileNameLen - nLineLen;
for(i = ; i < nSpaceLen; ++i)
{
fwrite(" ",,,fp);
}
fprintf(fp,"%s:%ld ",pFileName,lLine);
iRet = vfprintf(fp,fmt,args);
printf("iRet = %d\n",iRet);
va_end(args);
fflush(fp);
fclose(fp);
return iRet;
} int main()
{
char *p = "this is my first debug";
printf("%s-%s-%d\n",__FILE__,__func__,__LINE__);
LOG("%s %d\n",p,);
return ;
}

输出结果:

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中有如下输出结果:

简单化版:

#include<stdio.h>
#include<stdarg.h>
#include<string.h> const char * g_path = "/home/exbot/wangqinghe/log.txt";
#define LOG(fmt,...) my_fprintf(__FILE__,__FUNCTION__,__LINE__,fmt,##__VA_ARGS__) int my_fprintf(const char *pFileName,const char *pFunName,const long lLine,const char* fmt,...)
{
printf("%s-%s-%d\n",__FILE__,__FUNCTION__,__LINE__);
int iRet = -;
int i = ;
va_list args;
va_start(args,fmt);
FILE* fp = NULL;
fp = fopen(g_path,"at+");
fprintf(fp,"%s:%ld ",pFileName,lLine);
iRet = vfprintf(fp,fmt,args); //使用参数列表发送格式化输出到流stream中
printf("iRet = %d\n",iRet);
va_end(args);
fflush(fp);
fclose(fp);
return iRet;
} int main()
{
char *p = "this is my first debug";
printf("%s-%s-%d\n",__FILE__,__func__,__LINE__);
LOG("%s %d\n",p,);
//getchar();
return ;
}

输出结果:

Linux 打印可变参数日志的更多相关文章

  1. _vsnprintf在可变参数打印中的用法

    _vsnprintf,C语言库函数之一,属于可变参数.用于向字符串中打印数据.数据格式用户自定义. 函数简介 编辑 头文件: #include <stdarg.h> 函数声明: int _ ...

  2. Redis源码笔记--服务器日志和函数可变参数处理server.c

    前言 Redis源码中定义了几个和日志相关的函数,用于将不同级别的信息打印到不同的位置(日志文件或标准输出,取决于配置文件的设置),这些函数的定义位于 server.h 和server.c 文件中,包 ...

  3. C语言的可变参数在Linux(Ubuntu)与Windows下注意点

    基本上C语言的可变参数原理在不同平台和不同编译器下基本类似(通过函数入栈,从右向左,从高位到低位地址),不过部分实现会有所不同:在使用中需要注意的是: va_list 为char 类型指针,部分调用如 ...

  4. jpa hibernate 打印sql,format日志,打印SQL参数,打印什么指令

    环境说明:IntelliJ IDEA 2017.3.4 版本:SpringBoot 2.0.0.RELEASE:hibernate用的是JPA自带. 打印SQL 到控制台: 首先,我使用的是appli ...

  5. 利用可变参数打印log

    // ConsoleApplication1.cpp: 定义控制台应用程序的入口点. // #pragma once #include <string> #include <Wind ...

  6. linux dmesg命令参数及用法详解(linux显示开机信息命令)

    linux dmesg命令参数及用法详解(linux显示开机信息命令) http://blog.csdn.net/zhongyhc/article/details/8909905 功能说明:显示开机信 ...

  7. C语言可变参数在宏定义中的应用

    在C语言的标准库中,printf.scanf.sscanf.sprintf.sscanf这些标准库的输入输出函数,参数都是可变的.在调试程序时,我们可能希望定义一个参数可变的输出函数来记录日志,那么用 ...

  8. C语言中可变参数的用法

    原文地址: http://blog.csdn.net/wooin/archive/2006/04/29/697106.aspx   我们在C语言编程中会遇到一些参数个数可变的函数,例如printf() ...

  9. Linux 下实时查看日志

    Linux 下实时查看日志 cat /var/log/*.log 如果日志在更新,如何实时查看 tail -f /var/log/messages 还可以使用 watch -d -n 1 cat /v ...

随机推荐

  1. pytest参数化的两种方式

    1.传统方式 import requests,pytest from Learning.variable import * # 定义变量 #url = "https://www.baidu. ...

  2. kettle处理未发现hadoop插件问题

    背景:将测试环境的中kettle转换传输到生产环境上出现hadoop插件无法获取的错误 Hadoop File Output 2.0 - ERROR (version 7.1.0.0-12, buil ...

  3. luogu P2765 魔术球问题 (最小路径覆盖)

    大意:给定n根柱子, 依次放入1,2,3,...的球, 同一根柱子相邻两个球和为完全平方数, 求最多放多少个球. 对和为平方数的点连边, 就相当于求DAG上最小路径覆盖. #include <i ...

  4. .Net面试题四

    1.C#编译成的dll存放在哪个目录?C#程序文件的后缀名是什么?.csproj后缀名是什么文件? 2.请写出C#中常用文件操作类.数据库操作类.网络请求类.每项至少写出三个 3.请定义一个只读属性: ...

  5. 题解 P2280 【[HNOI2003]激光炸弹】

    题目链接: https://www.luogu.org/problemnew/show/P2280 思路: 简单的二维前缀和,最后扫描一遍求 max(ans,f[i][j]+f[i-r][j-r]-f ...

  6. 解决VS2015 不能设置下面的断点**** 断点未能绑定

    解决VS2015   不能设置下面的断点**** 断点未能绑定 1. 清理解决方案  ,  重新生成解决方案 ,  无效!! 2. 选项-- 调试 -- 启用编辑并继续     无效!! 3.   启 ...

  7. opencv3.3 CUDA 初学实例

    //swap.cu #include "cuda_runtime.h" #include "device_launch_parameters.h" #inclu ...

  8. 1 c#传递表变量去存储数据的例子

    1 c# 代码 using (SqlConnection con = GetEditorConnection()) { con.Open(); using (SqlCommand command = ...

  9. 5、SVN 权限管理

    5.SVN 权限管理 5.1版本库中三个对应的配置文件 版本库配置文件目录 /var/svn/repository/pro_oa/conf svnserve.conf 文件,如下修改: 19# ano ...

  10. python之判断和循环

    计算机之所以能做很多自动化的任务,因为它可以自己做条件判断.比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,可以用if语句实现: age = : print ('your age i ...