在项目中输出 日志信息

来源:互联网 发布:拼图软件知乎 编辑:程序博客网 时间:2024/04/28 08:51

情景: 近来工程中需要在Windows 的不同版本中进行测试,但是在一些版本中却出现了 Bug 。 不可能在每个平台下都安装环境进行调试吧,所以输出一个文件日志信息进行查看调试是最合理不过了。。


以下是一个输出日志信息的简单 Demo.. 在实际项目中可以对更多的 trace 函数进行重载更多的版本。

// 输出日志信息的 Demo// 2014-9-30 8:44:53#include "stdafx.h"#include <shlobj.h>//#define Enable_Trace_Log//#ifdef Enable_Trace_Log//// ...//#else//// ...//#endif#ifndef _DEBUG// 如果是非调试的情况下,没必要输出日志信息。 // 或者自己定义一个宏,在需要的时候如上面那几行的写法进行预处理void trace_init(){}void trace(LPCTSTR format,...){}#else#include <sstream>#include <atlstr.h> // for CStringvoid trace_init(){std::wostringstream so;TCHAR szPath[MAX_PATH] = {0};if (!SHGetSpecialFolderPath(NULL, szPath, CSIDL_LOCAL_APPDATA, TRUE)){return;}FILE* fp= NULL;_tcscat(szPath, _T("\\trace.log"));CString filter;fp=_tfopen(szPath, _T("r, ccs=UNICODE"));if(fp==NULL){filter=_T("w, ccs=UNICODE");}else{fclose(fp);fp=NULL;filter=_T("a, ccs=UNICODE");}fp=_tfopen(szPath, filter);//// Split Barfor(int i=1;i<100;i++){so<<L"=";}so<<std::endl;so<<L"Trace Log"<<std::endl;// TimeSYSTEMTIME st;GetLocalTime(&st);CString strTime;strTime.Format(_T("%4d-%02d-%02d, %02d:%02d:%02d.%03d"), st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds );so<<strTime.GetBuffer()<<std::endl;fwrite(so.str().c_str(),sizeof(wchar_t),so.str().length(),fp);fclose(fp);}void trace(LPCTSTR format,...){TCHAR szPath[MAX_PATH] = {0};if (!SHGetSpecialFolderPath(NULL, szPath, CSIDL_LOCAL_APPDATA, TRUE)){return;}FILE* fp = NULL;_tcscat(szPath, _T("\\trace.log"));fp=_tfopen(szPath, _T("a, ccs=UTF-8"));if(fp==NULL){return;}wchar_t buffer[1024];va_list arglist;std::wostringstream so;va_start ( arglist, format );vswprintf ( buffer, 1024, format, arglist );va_end ( arglist );so<<buffer<<std::endl;fwrite(so.str().c_str(),sizeof(wchar_t),so.str().length(),fp);fclose(fp);}#endif // _DEBUGint main(){trace_init(); // 在使用前先调用这一句,在MFC 代码中常添加到 C**App::InitInstance() 中去trace(TEXT("test: %s"), TEXT("BenDan....."));for (int i = 0; i < 10; ++i){trace(TEXT(": %d "), i);}trace(TEXT("End"));return 1;}



0 0
原创粉丝点击