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