Linux 打印可变参数日志
实现了传输进去的字符串所在的文档,函数和行数显示功能。
实现了将传入的可变参数打印到日志功能。
#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 打印可变参数日志的更多相关文章
- _vsnprintf在可变参数打印中的用法
_vsnprintf,C语言库函数之一,属于可变参数.用于向字符串中打印数据.数据格式用户自定义. 函数简介 编辑 头文件: #include <stdarg.h> 函数声明: int _ ...
- Redis源码笔记--服务器日志和函数可变参数处理server.c
前言 Redis源码中定义了几个和日志相关的函数,用于将不同级别的信息打印到不同的位置(日志文件或标准输出,取决于配置文件的设置),这些函数的定义位于 server.h 和server.c 文件中,包 ...
- C语言的可变参数在Linux(Ubuntu)与Windows下注意点
基本上C语言的可变参数原理在不同平台和不同编译器下基本类似(通过函数入栈,从右向左,从高位到低位地址),不过部分实现会有所不同:在使用中需要注意的是: va_list 为char 类型指针,部分调用如 ...
- jpa hibernate 打印sql,format日志,打印SQL参数,打印什么指令
环境说明:IntelliJ IDEA 2017.3.4 版本:SpringBoot 2.0.0.RELEASE:hibernate用的是JPA自带. 打印SQL 到控制台: 首先,我使用的是appli ...
- 利用可变参数打印log
// ConsoleApplication1.cpp: 定义控制台应用程序的入口点. // #pragma once #include <string> #include <Wind ...
- linux dmesg命令参数及用法详解(linux显示开机信息命令)
linux dmesg命令参数及用法详解(linux显示开机信息命令) http://blog.csdn.net/zhongyhc/article/details/8909905 功能说明:显示开机信 ...
- C语言可变参数在宏定义中的应用
在C语言的标准库中,printf.scanf.sscanf.sprintf.sscanf这些标准库的输入输出函数,参数都是可变的.在调试程序时,我们可能希望定义一个参数可变的输出函数来记录日志,那么用 ...
- C语言中可变参数的用法
原文地址: http://blog.csdn.net/wooin/archive/2006/04/29/697106.aspx 我们在C语言编程中会遇到一些参数个数可变的函数,例如printf() ...
- Linux 下实时查看日志
Linux 下实时查看日志 cat /var/log/*.log 如果日志在更新,如何实时查看 tail -f /var/log/messages 还可以使用 watch -d -n 1 cat /v ...
随机推荐
- 查看linux服务器信息
1. vmstat 查看服务器内存,CPU等信息 一般是通过两个数字参数来完成的,第一个参数是采样时间间隔,单位是秒, 第二个参数是采样的次数 r: 表示运行队列,如果队列过大说明CPU很繁忙 ...
- 快速写个node命令行工具
1.package.json-bin配置 [创建bat文件,把bat路径添加到PATH中]这些固定的工作可以由npm帮我们完成.package.json中有个bin字段配置: bin: { " ...
- css强制换行显示省略号之显示两行后显示省略号
1,首先来一个固定宽度,在一行显示,超出隐藏,显示省略号的样式 display:block; white-space:nowrap; overflow:hidden; text-overflow:el ...
- 7 java 笔记
1 方法是类或者对象行为特征的抽象,方法是类或对象最重要的组成部分 2 java里面方法的参数传递方式只有一种:值传递 值传递:就是将实际参数值的复制品传入方法内,而参数本身不会受到任何影响.(这是j ...
- vue+axios请求头封装
import { mapMutations } from 'vuex' import axios from 'axios' import { Toast } from 'mint-ui'; impor ...
- hbuilder打包集成文件预览
<div class="attachments"> <div class="name">附件</div> <div c ...
- Mysql学习笔记【一、环境安装&配置】
安装 https://www.mysql.com/ 官网下载安装包msi 安装流程略去 注:此处有坑,重新安装mysql 8之后,发现mysql起不来,可能原因有以下几点 1.没有data文件,运行m ...
- MacBook Pro实现共享屏幕(多台mac之间)
1 开启允许所有用户控制屏幕 设置— 共享 2 在另一台MacBook Pro里打开finder窗口,并设置好network显示边栏 3 另一台机器发送请求控制 找 ...
- oracle下关于table的常用sql整理
创建表,create TABLE table( 列名称1 数据类型1, 列名称2 数据类型2, 列名称3 数据类型3, ......); eg: create table TABLE_24751( i ...
- python常用模块:包的使用、init作用、相对导入绝对导入与内置函数
今天主要讲的内容有: 一.包的详解二.相对导入和绝对导入三.内置模块补充 一.包的详解 1.包是什么 包其实也是一个模块,只不过是一个大的模块下包含一堆模块的载体 本质上也是一个文件夹,与普通文件的区 ...