⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 writelog.h

📁 日志是程序的重要组成部分
💻 H
字号:
// WriteLog.h: interface for the CWriteLog class.
//
//////////////////////////////////////////////////////////////////////
#ifndef __WRITELOG_H__
#define __WRITELOG_H__
//////////////////////////////////////////////////////////////////////
#include "BasicDefine.h"
#include "MyQueue.h"
#include "sxitBase.h"
//////////////////////////////////////////////////////////////////////
#ifdef __cplusplus
extern "C"{
#endif
//////////////////////////////////////////////////////////////////////

//log level define                0:                   //不记
#define    LEVEL_ERROR            1                    //记录系统运行严重错误...
#define    LEVEL_SYS              2                    //记录系统运行过程信息...
#define    LEVEL_LOG              3                    //记录收发包动作...
#define    LEVEL_CONTENT          4                    //记录收发包详细内容...
#define    LEVEL_DEBUG            5                    //记录调试信息...

#define    BAK_LOG_FORMAT         "%s.%.2d%.2d.%.2d"   //备份日志文件名格式(文件名.月日.序号)

#define    DFT_LOGFILE            "log.log"            //默认日志文件名
#ifdef WIN32
#define    DFT_LOGPATH            ".\\log"             //默认日志文件路径
#else
#define    DFT_LOGPATH            "./log"              //默认日志文件路径
#endif

#define    VAL_DISPLAYBUF_LEN     5120                 //显示缓存长度

#define    MAX_LOGFILENAME_LEN    300                  //最大文件名长(包括路径长)	
#define    MAX_LOGPATH_LEN        200                  //最大路径长度

#define    MAX_MYLIB_FILENAME_LEN          1024		   //最大文件名长度
	

/* ----------------------------------------------------------------------------
  日志信息处理类

  Platform    :	Solaris/Linux

  Written     : 2003/02/17  杨广煜
  Revision    : 1.0

  Copyright (C) 2000-2003 Sxit Co.Ltd            All rights reserved.
 -----------------------------------------------------------------------------*/

FILE* mdfopen(const INT8* pFileName, const INT8* sMode);
		
class CWriteLog  
{
	enum { MAX_FILE_LEN = 5000000                     }; //最大文件长度
	enum { DFT_LOGLEVEL = 4,    MAX_LOGLEVEL   = 5    }; //默认/最大记日志级别
	enum { DFT_BAKLOGNUM= 99,   MAX_BAKLOGNUM  = 99   }; //默认/最大备份日志个数
	enum { DFT_EXPIRED_DAY= 30                        }; //默认日志有效期
	enum { DFT_QUEUE_NUM= 50                          }; //日志队列初始节点数与节点长度
	enum { MAX_FILE_NUM =   50                        }; //最大支持不同类日志数
	enum { MAX_WAIT_COUNT=  10                        }; //日志文件空等次数,超过关闭
	enum { MAX_MEM_SIZE= 5000                         }; //最大缓存大小(单位:K)                

	typedef struct SLogMessage
	{
		UINT8             cFileFlag;                          //写入文件标记
		UINT8             cLogLevel;                          //日志级别
		UINT8             cLogType;                           //信息类型
		INT8              sLogContent[ VAL_DISPLAYBUF_LEN ];  //日志内容

	} SLogMessage;

protected:
	INT8                 (*m_asLogFile)[ MAX_LOGFILENAME_LEN ];   //日志文件名表

	INT8                 m_sFilePath[ MAX_LOGPATH_LEN ];          //日志路径

	struct tm*           m_alFileTime;                            //日志文件操作日期表

	UINT8                m_iMaxLogTag;                            //日志使用最大下标

	UINT32               m_lMaxFileSize;                          //文件最大大小BYTE

	BOOL                 m_bLogFlag;                              //日志开关
	INT16                m_iLogBakNum;                            //每类日志备份日志数目
	UINT32               m_lLogExpiredDay;                        //日志有效期(天)

	const time_t*        m_pSystemTime;                           //系统时间指针
	const struct tm*     m_pLocalTime;                            //系统时间指针

	CMyQueue*            m_oQueue;                                //日志信息队列

	BOOL                 m_bExitFlag;                             //日志系统退出标记

public:
	INT16                m_iLogLevel;                             //日志级别

	static INT16         m_iPrintLevel;                           //打印级别

protected:
	//取得备份日志文件命名用的序列号(1-m_iLogBakNum)
	//如果有未使用的序号,使用最小的未使用序号
	//没有未使用序号,使用最早修改的文件的序号(则据此序列号命名的原文件将被覆盖)
	INT16        GetSerial( UINT8 cFileFlag );

	//打开日志文件
	FILE*        OpenLogFile( UINT8 cFileFlag );

	//得到当前时间字符串
	INT16        GetTimeString(INT8* sTime);

	//写日志线程
	static MYTYPE_THREAD_FUNC thWritingThread(void* pParam);

public:
	//添加日志信息到记日志队列
	//cLogTag 为日志文件标记
	INT16        AddLogMessage(const UINT8 cLogTag, const INT16 iLogLevel, const INT8* sFormat, ...);
	
	//添加日志信息到记日志队列, 为直接调用与包装调用提供接口
	//cLogTag 为日志文件标记
	INT16        AddLogMessage(const INT8* sFormat, const va_list args, const UINT8 cLogTag, const INT16 iLogLevel );
	
	//设置日志开关
	INT16        SetLogOpen(const INT16 iFlag);

	//设置备份日志数量
	INT16        SetLogBakNum(const INT16 iNum);

	//设置日志文件名
	INT16        SetLogFile( const INT8* sLogFile, const UINT8 cFileTag );

	INT16        PrintLogFile();

	//设置日志文件路径
	INT16        SetLogPath( const INT8* sLogPath );

	//设置日志级别
	INT16        SetLogLevel(const INT16 iLogLevel);

	//设置日志保存时间
	INT16        SetLogExpiredDay( const INT16 iExpiredDay );

	//设置系统时间指针,一定要在对象启动前设置
	INT16        SetTimeReference( const time_t* pSystemTime, const struct tm* pLocalTime );

	INT16        Start( const UINT32 lMaxSizeK= MAX_MEM_SIZE, const UINT32 lMaxFileSize= MAX_FILE_LEN );    //对象系统起动
	INT16        Shut();                                           //对象系统关闭

	UINT32       GetUsedNodeNum()   { return m_oQueue->GetUsedSum(); };

	UINT32       GetFreeNodeNum()   { return m_oQueue->GetFreeSum();  };

	UINT32       GetTotalNodeNum()  { return ( m_oQueue->GetUsedSum() + m_oQueue->GetFreeSum() );  };

	CWriteLog();
	~CWriteLog();

//	friend class CRunningParam;                        //负责对象参数初始化
};

//////////////////////////////////////////////////////////////////////
#ifdef __cplusplus
}
#endif
//////////////////////////////////////////////////////////////////////
#endif // ifndef __WRITELOG_H__
//////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -