📄 writelog.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 + -