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 ...
随机推荐
- k8s遇坑:The connection to the server k8s-api.virtual.local:6443 was refused - did you specify the right host or port?
k8s坑The connection to the server localhost:8080 was refused - did you specify the right host or port ...
- Java 反射理解(一)-- Class 类的使用
Java 反射理解(一)-- Class 类的使用 概念 这里阐述几个基本概念: 在面向对象的世界里,万事万物皆对象.(在 Java 语言中,静态的成员.普通数据类型除外) 类也是对象,类是 java ...
- the specified service is marked as deletion,can not find the file specified
使用命令注册windows service sc create CCGSQueueService binpath= "D:\DKX4003\services\xxx.xx.xx\xxx.ex ...
- 怎样在 js 中实现 反转字符串 的功能?
"string".split('').reverse().join('');
- JS ES5
常用 严格模式 use strict 必须使用var声明变量 禁止自定义函数this指向window 'use strict' funcion Person(name){ this.name = na ...
- js二维数组转一维数组
方法一 利用es5的arr.reduce(callback[, initialValue])实现 var arr1 = [[0, 1], [2, 3], [4, 5]]; var arr2 = arr ...
- vue学习(3)-增删改查
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- day10 mysql常用操作
一. 目录 1.mysql的简介 2.增删改查操作 3.单表查询 4.多表查询常见的三种方式 5.pymysql模块操作数据库 二. 内容 一.mysql的简介 概述:mysql是一个关系型数据库, ...
- 始终让footer在底部
1.footer保持在页面底部 需求: 我们希望footer能在窗口最底端,但是由于页面内容太少,无法将内容区域撑开,从而在 footer 下面会留下一大块空白 第一种方法:采用 flexbox布局模 ...
- 基于Openresty+Naxsi的WAF:从小白到实践
序 2019年2月18日,加入妈妈网,至今已经有四个月的时间,上周进到一个网关项目组,这个项目的主要目的是基于openResty+Naxsi实现WAF,相关技术初定涉及到openResty.Lua.N ...