C++的一个日志类,和log4cplus很像
来源:互联网 发布:网络结构分类 编辑:程序博客网 时间:2024/05/16 17:17
filelogs.h
#ifndef H_FILELOGS_H#define H_FILELOGS_H#include "stdlib.h"#include "stdio.h"#include <string.h>#include <time.h>#include <sys/types.h>#include <sys/stat.h>#define MAX_FILE_LEN 5242880 //5M#define MAX_PATH_LEN 300#define RTN_FAIL-1#define RTN_SUCCESS 0#define WriteLog(Msg)WriteMsgLog(__FILE__,__LINE__,Msg)class CFileLogs {public:CFileLogs();virtual ~CFileLogs();bool IsOpen();int init(int iLogLevel,const char *pcDebugLogFileName);bool OpenFile(char *);bool OpenNewOutputFile(char *);bool GetLock();int WriteMsgLog(const char *,int,const char *);int WriteOutputMsg(const char *);public:char m_FileName[MAX_PATH_LEN + FILENAME_MAX + 1];int m_LogLevel;private:bool m_lock;FILE *m_file;private:bool CheckFile();void GetTimeStr(char *);};#endif
filelogs.cpp
// filelogs.cpp: implementation of the CFileLogs class.////////////////////////////////////////////////////////////////////////#include "filelogs.h"//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////CFileLogs::CFileLogs(){m_lock = false;m_file = NULL;}CFileLogs::~CFileLogs(){if(m_file != NULL)fclose(m_file);}//////////////////////////////////////////////////////////////////////// public method//////////////////////////////////////////////////////////////////////bool CFileLogs::GetLock(){if(m_lock == true) return false;m_lock = true;return true;}bool CFileLogs::IsOpen(){if(m_file != NULL)return true;else return false;}int CFileLogs::init(int iLogLevel,const char *pcDebugLogFileName){this->m_LogLevel = iLogLevel;//if log level less than 1 , then don't open log fileif (this->m_LogLevel > 0) {if (pcDebugLogFileName == NULL) {return RTN_FAIL;}else {strcpy(this->m_FileName, pcDebugLogFileName);//this->m_DebugLogFileName = strDuplicate(pcDebugLogFileName);}}FILE *logFile=NULL;if (this->m_LogLevel >= 3) {logFile = fopen(this->m_FileName,(char *)"a+");if (logFile == NULL) {printf("Cannot open file %s to write!\n", this->m_FileName);return RTN_FAIL;}fclose(logFile);}return RTN_SUCCESS;}bool CFileLogs::OpenFile(char *filePathAndName){if(filePathAndName == NULL)return false;sprintf(m_FileName, filePathAndName);if((m_file = fopen(m_FileName, "a")) == NULL)return false;return true;}bool CFileLogs::OpenNewOutputFile(char *filePathAndName){if(filePathAndName == NULL)return false;if( IsOpen() )fclose(m_file);sprintf(m_FileName, filePathAndName);if((m_file = fopen(m_FileName, "a")) == NULL)return false;return true;}int CFileLogs::WriteMsgLog(const char *pcsrcfile,int line,const char *strMsg){char buf[100];CheckFile();if(m_file == NULL)m_file = fopen(m_FileName, "a");if(m_file != NULL && strMsg != NULL) {GetTimeStr(buf);fprintf(m_file, "[%s]line[%d][%s] %s\n",pcsrcfile,line,buf,strMsg);//pcsrcfilefflush( m_file ); } else {return 0;}m_lock = false;return 1;}int CFileLogs::WriteOutputMsg(const char *strMsg){if (m_file == NULL)m_file = fopen(m_FileName, "a");if (m_file != NULL && strMsg != NULL) {fprintf(m_file, "%s\n",strMsg);fflush( m_file ); } else {return 0;}m_lock = false;return 1;}bool CFileLogs::CheckFile(){struct stat statBuf;intnRet;char strNewName[500];struct tm * pTime;if(m_file == NULL)return false;nRet = fstat(#ifdef LINUXfileno(m_file)#else#ifdef HPUX fileno(m_file) #elsem_file->_file#endif#endif , &statBuf );if( nRet != 0 ) {printf( "CFileLogs:Bad file handle!\n" );return false;} else {if(statBuf.st_size > MAX_FILE_LEN) {pTime = localtime(&statBuf.st_mtime);sprintf( strNewName, "%sY%dM%dD%dH%dM%dS%d", m_FileName, pTime->tm_year + 1900, pTime->tm_mon+1, pTime->tm_mday, pTime->tm_hour, pTime->tm_min, pTime->tm_sec);fclose(m_file);m_file = NULL;rename(m_FileName, strNewName);}}return true;}void CFileLogs::GetTimeStr(char *pStr){time_t ltime;struct tm *pNow,now;time(<ime);#ifdef WIN32pNow = localtime(<ime);#elsepNow = localtime_r(<ime, &now);#endifsprintf(pStr, (char *)"%2d-%02d-%02d %02d:%02d:%02d",pNow->tm_year + 1900, pNow->tm_mon+1, pNow->tm_mday,pNow->tm_hour, pNow->tm_min, pNow->tm_sec);return;}
1 0
- C++的一个日志类,和log4cplus很像
- 一个基于log4cplus的简单日志类
- 贴一下Log4cplus每天记录一个日志文件的配置。
- C++ 日志类库 log4cplus
- log4cplus中自定义的使用配置文件输出日志的类
- log4cplus的包裹类(log4cplus Wrapper)
- 日志系统log4cplus的配置与使用
- 日志系统log4cplus的配置与使用
- c++日志工具log4cplus的使用
- 让Log4CPLUS每个CPP记一个日志文件
- 让Log4CPLUS每个CPP记一个日志文件
- 一个格式较好的log4cplus properties配置文件
- log4cplus的一个常用封装实例
- log4cplus 日志应用
- 使用log4cplus写日志
- log4cplus是C++编写的开源的日志系统
- iOS 一个很简单的使用类的代码,和.net很像,很好理解
- iOS 一个很简单的使用类的代码,和.net很像,很好理解
- Epoll详解及源码分析
- CSS3 Multiple backgrounds 和 CSS3 Animation
- 详解link
- iOS应用支持64位系统及Instruments工具使用详解
- CocoStudio目录
- C++的一个日志类,和log4cplus很像
- Windows 平台上的使用 Java 语言实现 appium 自动化程序 for Android(完整版)
- 图片处理类 压缩水印
- 写给喜欢用Block的朋友(ios Block)
- iOS 弹性HeaderView 的ScrollView
- UNIX环境高级编程-第13章- 守护进程
- iOS - 更改项目名称图文教程
- github for windows 2.0教程入门
- 如何加速./mk snod打包