c++实现日志系统(含源码)
来源:互联网 发布:淘宝质量问题怎么赔偿 编辑:程序博客网 时间:2024/06/07 03:27
最近在做游戏开发,阅读了一些源码后做了一些总结与记录,希望对自己和其他的朋友有所帮助。软件开发中常常将关键的操作、一般性警告以及严重的错误,通过字符串的形式输出至日志文件,本子系统实现bootlog,debuglog,warning,fatallog等输出形式,支持多线程。有不到之处欢迎指正,交流。email:caohaitao_linux@163.com
LoLog日志系统关键知识:
1.文件操作
2.获取当前时间的字符串
3.变参函数的处理
LoLog组成要素:
1.文件指针
2.文件状态(可省)
3.互斥锁
注:文件状态可以通过判断文件指针是否为空来获得,但此过程使用频繁,以函数调用形式会使得压栈弹、栈操作过多。static int占用空间较少,变量见名知意使用方便,最好不要省略文件状态变量
UML图:
文件打开操作
int LoLogs::OpenLog(const char *pcLogLead){int nRet = 0;if(m_nFileStatus == FILESTATUS_CLOSE){char szOpenPathName[MAXSIZE_PATHNAME] = {0};time_tltime;tmtmStruct;time(<ime);tmStruct = *localtime(<ime);strcat(szOpenPathName, SUBDIRNAME_LOG);sprintf(szOpenPathName + strlen(szOpenPathName), "%s%04d-%02d-%02d.log",pcLogLead, tmStruct.tm_year+1900,tmStruct.tm_mon+1,tmStruct.tm_mday);#ifdef WIN32CreateDirectory(SUBDIRNAME_LOG, NULL);#else /* LINUX */mkdir(SUBDIRNAME_LOG, 0700);#endifm_fileSvrLog = fopen(szOpenPathName, "a+");if(m_fileSvrLog) {m_nFileStatus = FILESTATUS_OPEN;}else{nRet = -1;}}return nRet;}
获取当前时间的字符串
// CLogs class member functionsconst char *LoLogs::GetCurDateTimeWithString(char *pStringBuf){time_ttCurDateTime;tm*ptagCurDataTime;charszTimeStringBuf[MAXSIZE_TIMESTRING] = {0};char *pWriteStringBuf = pStringBuf;if(NULL == pWriteStringBuf){pWriteStringBuf = szTimeStringBuf;}time(&tCurDateTime);ptagCurDataTime = localtime(&tCurDateTime);sprintf(pWriteStringBuf, "%d-%02d-%02d %02d:%02d:%02d", ptagCurDataTime->tm_year+1900, ptagCurDataTime->tm_mon+1, ptagCurDataTime->tm_mday, ptagCurDataTime->tm_hour, ptagCurDataTime->tm_min, ptagCurDataTime->tm_sec);return pWriteStringBuf;}
变参函数的处理
void LoLogs::WriteLog(const char *pcLogMsg, ...){char szMsgBuf[MAXSIZE_MSGBUF] = {0};va_list va;va_start(va, pcLogMsg);vsprintf(szMsgBuf, pcLogMsg, va);#ifdef WIN32printf( szMsgBuf );#endifva_end(va);WriteLogInner(szMsgBuf, LOGLEADNAME_BOOT);}
c++实现日志系统源码
0 0
- c++实现日志系统(含源码)
- 二叉排序树C实现(含完整源码)
- 二叉排序树C实现(含完整源码)
- 二叉排序树C实现(含完整源码)
- 【数据结构与算法】二叉排序树C实现(含完整源码)
- 【数据结构与算法】二叉排序树C实现(含完整源码)
- 【数据结构与算法】二叉排序树C实现(含完整源码)
- 第十五篇:二叉排序树C实现(含完整源码)
- OpenGL烟花粒子系统(含源码)
- java运用jni调用dll(含源码)实现屏蔽系统热键和任务栏
- JasperReport实现维修报单系统(含工程源码)
- JasperReport实现维修报单系统(含工程源码)
- JasperReport实现维修报单系统(含工程源码)
- JasperReport实现维修报单系统(含工程源码)
- JasperReport实现维修报单系统(含工程源码)
- JasperReport实现维修报单系统(含工程源码)
- 融系统中PBOC/EMV的TLV的算法实现(含C++/C#)
- 融系统中PBOC/EMV的TLV的算法实现(含C++/C#)
- Linux驱动手动绑定和解绑定
- HashMap多线程下发生死循环的原因
- A1106. Lowest Price in Supply Chain (25)
- springboot data rest 4
- 加密ASP为DLL的详细步骤给点RMB不多是个心意尊重脑力劳动者的付出
- c++实现日志系统(含源码)
- Spring 数据访问那些事儿(二)Spring + JdbcTemplate
- java动态代理和cglib动态代理
- 分冶-二分查找
- ubuntu 改时区
- Java7:int i=0b010101;
- android: 侧滑菜单的实现(ViewDragHelper)
- Makefile 简单模板
- 大数据监控系统相关设计开发