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

📄 log.h

📁 关于联通的一个统一定制程序
💻 H
字号:
// Log.h: interface for the CLog class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_LOG_H__A5AA01A7_80BE_4A5B_9312_1C26B6B61835__INCLUDED_)
#define AFX_LOG_H__A5AA01A7_80BE_4A5B_9312_1C26B6B61835__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <afxmt.h>

#define		Export   __declspec( dllexport )
#define		Import   __declspec( dllimport )

//不可更改
//Memery Relative
#define     LTMAXNUM		16//log type max
#define     ITEMTABLE		18//item table = item+1  0:Filekey on/off

//不可更改
//define Log type.
#define LT_IAS	1//:IOD接收成功	
#define LT_IAF	2//:IOD接收失败	
#define LT_ISS	3//:IOD发送成功	
#define LT_ISD	4//:IOD发送丢弃	
#define LT_PSF	5//:Push发送失败	
#define LT_PSS	6//:Push发送成功
#define LT_RAS	7//:Router接收		
#define LT_RRS	8//:Router拒绝		
#define LT_RSG	9//:Router发送		
#define LT_RDS	10//:Router丢弃		
#define LT_GAO	11//:网关接收		
#define LT_GFI	12//:网关>IOD失败	
#define LT_GAR	13//:网关<Router	
#define LT_GSO	14//:网关发送正确	
#define LT_GFO	15//:网关发送错误	
#define LT_GDO	16//:网关发送丢弃

#define LT_SYS  99//系统日志文件


//需在运维人员指导下修改
//掩码定义
#define LSDEBUG_IAS_OFF	"IAS_11111101111111111"
#define LSDEBUG_IAF_OFF	"IAF_11111101111111111"
#define LSDEBUG_ISS_OFF "ISS_11111101111111111"
#define LSDEBUG_ISD_OFF	"ISD_11111101111111111"
#define LSDEBUG_PSF_OFF	"PSF_11111001111111111"
#define LSDEBUG_PSS_OFF	"PSS_11111001111111111"
#define LSDEBUG_RAS_OFF	"RAS_11111001111111111"
#define LSDEBUG_RRS_OFF	"RRS_11111001111111111"
#define LSDEBUG_RSG_OFF	"RSG_11111001111111111"
#define LSDEBUG_RDS_OFF	"RDS_11111001111111111"
#define LSDEBUG_GAO_OFF	"GAO_11111001110011111"
#define LSDEBUG_GFI_OFF	"GFI_11111001110011111"
#define LSDEBUG_GAR_OFF	"GAR_11111001110011111"
#define LSDEBUG_GSO_OFF	"GSO_11111111110011111"
#define LSDEBUG_GFO_OFF	"GFO_11111111110011111"
#define LSDEBUG_GDO_OFF	"GDO_11111111110011111"

#define LSDEBUG_IAS_ON	"IAS_11000101101111111"
#define LSDEBUG_IAF_ON	"IAF_11000101101111111"
#define	LSDEBUG_ISS_ON  "ISS_11111101111111111"
#define LSDEBUG_ISD_ON	"ISD_11111101111111111"
#define LSDEBUG_PSF_ON	"PSF_11111001111111111"
#define LSDEBUG_PSS_ON	"PSS_11111001111111111"
#define LSDEBUG_RAS_ON	"RAS_11111001101111111"
#define LSDEBUG_RRS_ON	"RRS_11111001101111111"
#define LSDEBUG_RSG_ON	"RSG_11111001101111111"
#define LSDEBUG_RDS_ON	"RDS_11111001101111111"
#define LSDEBUG_GAO_ON	"GAO_11001001110001111"
#define LSDEBUG_GFI_ON	"GFI_11000001101011111"
#define LSDEBUG_GAR_ON	"GAR_11111001100001111"
#define LSDEBUG_GSO_ON	"GSO_11111111110001111"
#define LSDEBUG_GFO_ON	"GFO_11111111110011111"
#define LSDEBUG_GDO_ON	"GDO_11111111110011111"

typedef struct tagLog{
	//定长字段
	CString			strTime;		//时间HHMMSS			//内部获取
	CString			strSubCode;		//业务代码				//外部输入
	CString			strFeeType;		//计费类型				//外部输入
	CString			strFee;			//费用					//外部输入
	CString			strIsSMC;		//是否SMC				//外部输入
	CString			strFeeMobile;	//计费手机				//外部输入
	CString			strThreadID;	//线程号				//外部输入
	CString			strStrFmt;		//字符Format			//外部输入
	CString			strMSGLever;	//消息级别				//外部输入
	//非定长字段
	CString			strMSGID;		//MSGID					//外部输入
	CString			strTargetID;	//去向代码				//外部输入
	CString			strSouceID;		//来源代码				//外部输入
	CString			strErrorCode;	//错误代码				//外部输入
	CString			strDestMobile;	//手计号				//外部输入
	CString			strSrcMobile;	//源手机号				//外部输入
	int				iMsgLength;		//信息长度				//外部输入
	unsigned char	szContent[3000];//信息					//外部输入	
	tagLog()
	{
		strTime		= "SYS_NULL";
		strSubCode	= "SYS_NULL";
		strFeeType	= "SYS_NULL";
		strFee		= "SYS_NULL";
		strIsSMC	= "SYS_NULL";
		strFeeMobile= "SYS_NULL";
		strThreadID = "SYS_NULL";
		strStrFmt	= "SYS_NULL";
		strMSGLever = "SYS_NULL";
//非定长字段
		strMSGID	= "SYS_NULL";
		strTargetID = "SYS_NULL";
		strSouceID  = "SYS_NULL";
		strErrorCode= "SYS_NULL";
		strDestMobile="SYS_NULL";
		strSrcMobile= "SYS_NULL";
		iMsgLength	= 0 ;
		memset(szContent,0,3000);
	}
	void SetContent(CString str)
	{
		int len = str.GetLength();
		if(len<=0)
			return;
		if(len>2999)
			len = 2999;
		iMsgLength = len;
		memset(szContent,0,3000);
		memcpy(szContent,str.GetBuffer(len),len);
	}
	void SetContent(unsigned char* str,int len)
	{
		if(str==NULL)
			return;
		if(len>2999)
			len = 2999;
		iMsgLength = len;
		memset(szContent,0,3000);
		memcpy(szContent,str,len);
	}
	void SetContent(char* str,int len)
	{
		if(str==NULL)
			return;
		if(len>2999)
			len = 2999;
		iMsgLength = len;
		memset(szContent,0,3000);
		memcpy(szContent,str,len);
	}
}LOGRECORD;

typedef struct tagFile{
	int			iLogType;
	CString		strThread;
	tagFile()	{iLogType = 0;strThread = "00";}
}FILETABLE;// 需要生成的文件表

typedef struct tagIni{
	CString		strFolder;
	CString		strServer;
	CString		strModule;
	CString		strFilter[LTMAXNUM];
	FILETABLE   ftlist[LTMAXNUM];
	tagIni()
	{
		
		strFolder = "SYS_NULL";
		strServer = "SYS_NULL";
		strModule = "SYS_NULL";
		
		/*
		strFolder = "";
		strServer = "";
		strModule = "";
		*/
		for(int i = 0;i<LTMAXNUM; i++)
		{
			strFilter[i] = "SYS_NULL";
		}
	}
}INITABLE;


class Import CLog 
{
public:	
	//退出标志
	BOOL	m_bExit;						
	
	//初始化参数
	int InitialLog(INITABLE iniParam);

	//“写”接口
	int	WriteLog(LOGRECORD lgRecord,int iLogType,LPCTSTR strThreadID);  //事务日志“写”接口1
	int	WriteLog(LOGRECORD lgRecord,int iLogType);						//事务日志“写”接口2	
	int	WriteLog(LPCTSTR strContent,LPCTSTR strErrorCode = NULL);									//系统日志“写”接口	

	//关闭所有文件
	int CloseLog();	

	//检查文件状态
	void CheckActive();

	CLog();
	virtual ~CLog();	

	
private:
	int		m_filecount;					//文件数
	long	m_ThreadCount;					//正在执行的线程数
	BOOL	m_bHaveClosed;					//所有文件关闭标志
	//初始化配置参数
	//Active Table
	BOOL	m_bFileActive[LTMAXNUM][ITEMTABLE];	//[][0]:File Active [][i>0]: content Active
	int		m_iItemByte[ITEMTABLE];
	BOOL	m_bMultiFile;						//指的是多线程多文件和多线程单文件   TRUE:路由类型(duoduo);FALSE:其他(duodan)
	/*
	//Log Directer
	CString m_logFolder;	
	//Filelist
	CPtrList m_filelist;
	CCriticalSection cs;						//文件列表保护变量
	
	CString m_servername;
	CString m_modulname;
	
	CString m_oldDate; 
	*/
	int		CheckDateChanged();
	
	//初始化函数
	int		InitialLog(CString strCFG);

	int		ReadCfg(CString strCFG);			//获取配置信息
	CString GetAppPath();						//执行文件目录
	int		Add2FList(int iFileType,CString strThread);						//加入静态链表
	int		InitialFileList();
	//设置目录
	int		SetLogFolder(CString str);	
	//初始化配置表项(可由外部动态变更)
	int		SetFileActive(int iFileType,BOOL bActive);						//File都可以设置Active
	CString GetAppName(CString str);
	CString GetServerName(CString str);

	//设置掩码表
	int		SetItemActive(int iFileType,int iItem,BOOL bActive);			//某些File的Item不能设置Active off
	void	SetFilter(CString strType);			//设置掩码
	//字符整合
	CString CheckContentChar(unsigned char *str,CString Fmt,int iFileType,int len);//检查信息特殊字符“\r”“|”  按照Fmt转换字符
	CString GetItemString(int iFileType,CString str,int iItem);				
	CString GetItemString(int iLogType,int iNum,int iItem);	//获取格式化字符串
	CString GetOpIDAdd(char chOld[2]);//36进制
	CString GetFileType(int type);
	CString GetThreadID(int iThread);
	CString GetThreadID(CString strThread);
	void    GetDateTime(CString &strDate,CString &strTime);
	CString GetFileOprID(int iD);//10jinzhi
	int		CheckStringValiable(CString str);				//字符有效性
	
	//日志输出
	int		Write2Log(CString strHead,CString strRecord);//动态
	int		Write3Log(int iFileType, CString strThreadID,CString strContent);//静态
	//time_t  m_oldDate;
	
};

#endif // !defined(AFX_LOG_H__A5AA01A7_80BE_4A5B_9312_1C26B6B61835__INCLUDED_)

⌨️ 快捷键说明

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