调试时打印日志信息.docx
- 文档编号:764606
- 上传时间:2022-10-12
- 格式:DOCX
- 页数:28
- 大小:20.88KB
调试时打印日志信息.docx
《调试时打印日志信息.docx》由会员分享,可在线阅读,更多相关《调试时打印日志信息.docx(28页珍藏版)》请在冰豆网上搜索。
调试时打印日志信息
调试时打印日志信息
//使用说明
/************************
一、
工程名.h
#include"CxLog.h"
externCxLog*gCxLog;
二、
工程名.CPP
CxLog*gCxLog;
...InitInstance()
{
boolalive=true;
gCxLog=NULL;
gCxLog=newCxLog(alive);
..
}
...ExitInstance()
{
if(gCxLog!
=NULL)
{
deletegCxLog;
}
gCxLog=NULL;
..
}
三、
找个全局的地方
#defineOUTPUT_LOG_EN//启用日志输出
四、
在任何要打印日志的地方
#ifdefOUTPUT_LOG_EN
CStringstrTemp;
strTemp.Format(_T("想要添加的工作日志!
"));
gCxLog->Log(_T("类.cpp"),_T("函数名"),
哪一行比如50,CxLog:
:
CX_LOG_MESSAGE,strTemp);
#endif
*************************/
#ifndef_CX_LOG_H_
#define_CX_LOG_H_
#ifdefined(_MSC_VER)
#pragmawarning(disable:
4530)
#endif
#include<stdio.h>
#include<time.h>
#include<assert.h>
#include<list>
#include<iterator>
#include<stdexcept>
#include<exception>
#ifdefined(_MSC_VER)||defined(__INTEL_COMPILER)
#include<comdef.h>
#endif
#include<tchar.h>
#include<process.h>
#include<windows.h>
//////////////////////////////////////////////////////////////////////////
///文件型多线程日志类classforlogfile
//定义格式化输出
#ifndefCX_LOG_DEFAULT_FORMAT
#if(defined(_MSC_VER)&&_MSC_VER<=1310)||defined(__BORLANDC__)||(defined(__GNUC__)&&defined(_UNICODE))
#defineCX_LOG_DEFAULT_FORMAT_T("%s%s%s(%d):
%s\r\n")
#else
#defineCX_LOG_DEFAULT_FORMAT_T("%s%s%s(%s,%d):
%s\r\n")
#endif
#endif
//定义格式化输出的缓冲区大小
#ifndefCX_LOG_DEFAULT_FORMAT_SIZE
#defineCX_LOG_DEFAULT_FORMAT_SIZE1024
#endif
//定义是否替换控制用ASCII
#ifndefCX_LOG_REPLACE_CONTROL
#defineCX_LOG_REPLACE_CONTROLtrue
#endif
//定义控制用ASCII的默认替换字符
#ifndefCX_LOG_REPLACE_ASCII
#defineCX_LOG_REPLACE_ASCII_T('')
#endif
//定义窗口通知消息
#ifndefWM_CX_LOG
#defineWM_CX_LOGWM_USER+2200
#endif
classCxLog
{
public:
enumEnumType{
CX_LOG_MESSAGE=0,
CX_LOG_WARNING,
CX_LOG_EXCEPTION,
CX_LOG_ERROR
};
staticCxLog&Instance()
{
staticboolalive=false;
staticCxLoglog(alive);
if(!
alive)
{
OutputDebugString(_T("CxLoghasdestroy!
"));
throwstd:
:
runtime_error("CxLoghasdestroy!
");
}
returnlog;
}
structItem
{
SYSTEMTIME_Time;//>timestamp
TCHAR_szTime[24];
LPTSTR_szSrc;//>sourcefilename
LPTSTR_szFunc;//>founctionname
ULONG_uLine;//>linenumber
EnumType_eType;//
LPTSTR_szDesc;//>content
LPBYTE_pBin;//>binarydataszBuffer
ULONG_uBinSize;//>thesizeofbinarydataszBuffer
//BOOL_bLog;//>completethelog
Item()
{
InitItem(NULL,NULL,0,CX_LOG_MESSAGE,NULL,NULL,0);
}
Item(LPCTSTRszSrc,LPCTSTRszFunc,constULONGuLine,constEnumTypeeType,
LPCTSTRszDesc,LPVOIDpBin=NULL,ULONGuSize=0)
{
InitItem(szSrc,szFunc,uLine,eType,szDesc,pBin,uSize);
}
~Item()
{
ReleaseStringBuffer(_szSrc);
ReleaseStringBuffer(_szFunc);
ReleaseStringBuffer(_szDesc);
if(_pBin)
{
delete[]_pBin;
_pBin=NULL;
}
}
VOIDInitItem(LPCTSTRszSrc,LPCTSTRszFunc,constULONGuLine,constEnumTypeeType,
LPCTSTRszDesc,LPVOIDpBin,ULONGuSize)
{
GetLocalTime(&_Time);
wsprintf(_szTime,_T("%04d-%02d-%02d%02d:
%02d:
%02d.%03d"),
_Time.wYear,
_Time.wMonth,
_Time.wDay,
_Time.wHour,
_Time.wMinute,
_Time.wSecond,
_Time.wMilliseconds
);
_eType=eType;
_uBinSize=_uLine=0;
_szSrc=_szFunc=_szDesc=NULL;
_pBin=NULL;
if(szSrc)
{
LPCTSTRp=szSrc;
#ifndefCX_LOG_FULL_SOURCE_NAME
p=szSrc+_tcslen(szSrc);
while(p>szSrc&&*p!
=_T('\\'))
p--;
if(*p==_T('\\'))
p++;
#endif
AllocStringBuffer(_szSrc,p);
_uLine=uLine;
}
AllocStringBuffer(_szFunc,szFunc);
AllocStringBuffer(_szDesc,szDesc);
if(pBin&&uSize)
{
_pBin=newBYTE[uSize];
assert(_pBin);
memcpy(_pBin,pBin,uSize);
_uBinSize=uSize;
}
}
VOIDAllocStringBuffer(LPTSTR&szDest,LPCTSTR&szSrc)
{
if(szSrc)
{
ULONGuSize=_tcslen(szSrc)+1;
szDest=newTCHAR[uSize];
assert(szDest);
memcpy(szDest,szSrc,uSize*sizeof(TCHAR));
}
}
VOIDReleaseStringBuffer(LPTSTR&lpDest)
{
if(lpDest)
{
delete[]lpDest;
lpDest=NULL;
}
}
LPTSTRFormat(LPTSTRszBuffer,ULONGuSize,ULONG*pSize=NULL)
{
staticLPCTSTRszType[]={_T("Message"),_T("Warning"),_T("Exception"),_T("Error")};
if(!
szBuffer)
returnszBuffer;
intiLen;
#if(defined(_MSC_VER)&&_MSC_VER<=1310)||defined(__BORLANDC__)||(defined(__GNUC__)&&defined(_UNICODE))
iLen=_sntprintf(szBuffer,uSize,
CX_LOG_DEFAULT_FORMAT,
_szTime,szType[_eType],
_szSrc?
_szSrc:
_T(""),_uLine,
_szDesc?
_szDesc:
_T(""));
#else
iLen=_sntprintf(szBuffer,uSize,
CX_LOG_DEFAULT_FORMAT,
_szTime,szType[_eType],
_szSrc?
_szSrc:
_T(""),_szFunc?
_szFunc:
_T(""),_uLine,
_szDesc?
_szDesc:
_T(""));
#endif
if(iLen>4&&!
_tcsncmp(szBuffer+iLen-4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 调试 打印 日志 信息