18、通过可变参数实现打印日志
2010-12-06 21:31
330 查看
在c和c++中,可变参数使用的最多函数有:scanf,printf,以及fprintf,fscanf,sprintf等,MFC也提供CString::Format实现可变参数。
本示例通过va_list来实现自己的可变参数函数,实现程序写日志功能。
C++ version 2
参考
[1] http://www.cplusplus.com/reference/clibrary/cstdio/vsprintf/
[2] /article/5663712.html
[3] /article/4743240.html
讲述了了va_start等可变参数的基本概念及定义
本示例通过va_list来实现自己的可变参数函数,实现程序写日志功能。
C++ version 2
// AssistTest.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "cstdio" #include "iostream" #include "string" #include "fstream" #include "cstdarg" #include "windows.h" using namespace std; const int OP_SUCCESS = 0; const int OP_FAILED = -1; static string TestIT_MODULE = "TestItMe"; class mt { public: void LogRecord(string strFunc, unsigned int uiLine, string strMod, int iulErrCode, char* cFormat, ...); //print log module }; void mt::LogRecord(string strFunc, unsigned int uiLine, string strMod, int iErrCode, char* cFormat, ...) { string strLog; strLog.clear(); char acBuffer1[255], acBuffer2[255]; sprintf_s(acBuffer1, 254, "[%s] [%d] [%s] [%d] ", strFunc.data(), uiLine, strMod.data(), iErrCode); va_list args; va_start (args, cFormat); vsprintf(acBuffer2,cFormat, args); ofstream ofLogFile; ofLogFile.open("F:\\log.txt", ios::out | ios::app); if (!ofLogFile) { return; } string strBuffer1, strBuffer2; strBuffer1 = acBuffer1; strBuffer2 = acBuffer2; ofLogFile.write(strBuffer1.data(), strBuffer1.size()); ofLogFile.write(strBuffer2.data(), strBuffer2.size()); ofLogFile.put('\n'); ofLogFile.close(); va_end(args); } int main(int argc, char* argv[]) { string strFileName = "C:\\Intel\\Logs"; mt m1; m1.LogRecord(__FUNCTION__, __LINE__ ,TestIT_MODULE, -1, "GetFile %s Attributes fail error code %d", strFileName.data(), GetLastError()); }
参考
[1] http://www.cplusplus.com/reference/clibrary/cstdio/vsprintf/
[2] /article/5663712.html
[3] /article/4743240.html
讲述了了va_start等可变参数的基本概念及定义
相关文章推荐
- c++11使用可变参数实现日志打印
- __android_log_vprint可变参数打印日志
- 可变参数实现log打印
- 可变参数的实现是通过数组的方法?
- “传递/转发”可变参数并通过printf记录程序日志,彻底告别vsnprintf!:)
- 可变参数 函数(可变参列表—2) 实现小型日志文件
- 使用log4jdbc实现打印完整带参数的sql语句日志
- 可变参数列表通过宏来实现(头文件stdarg.h)
- JNI开发第二篇通过反射实现C中调用java代码,并实现Log打印日志
- c里面可变参数实现日志系统的大概思路
- 嵌入式中通过可变参数va实现printf
- C中可变参数宏实现调试打印
- C语言中的可变参数-printf的实现原理 在C/C++中,对函数参数的扫描是从后向前的。C/C++的函数参数是通过压入堆栈的方式来给函数传参数的(堆栈是一种先进后出的数据结构),最先压入的参数最后出
- “传递/转发”可变参数并通过printf记录程序日志,彻底告别vsnprintf
- linux c 定义打印时间/文件名/行/函数日志的可变参数宏定义,如果需要的话可以参考
- iOS可变参数实现及原理剖析
- java利用可变参数实现批量判断字符串是否为空
- 通过AOP及注解实现日志模块的可拔插
- android通过蓝牙连接打印机实现格式化打印(二)
- 可变参数实现分析