1 告警日志模块设计
1.1 功能分析
本模块的功能是将产生的告警输出到串口或者日志文件
1.2 基本原理
输出到串口的告警等级缺省为info级别;输出到文件的告警等级缺省为alert级别,将alert及更高级别的信息保存到文件。
当其他模块有告警产生时,调用sysLogMsg(MODULEIDmodule, LEVELID level,const char * format, ...)函数向该模块发送告警消息,传入参数有告警模块、告警等级以及消息体。该模块根据告警模块和告警等级将消息输出到串口或者保存到文件。
如果消息队列满或者消息的长度大于256字节,则该消息被丢弃。对于要输出到串口的消息,直接printf打印输出;对于要保存到文件的消息,先暂存在Buf中,并将标志位置1,每次将Buf写入文件前,使用tick计数的方式计算与上次保存时间的间隔,当间隔大于指定值,且标志位为1时,把Buf中的内容写入文件。
1.3 数据结构设计
typedef struct tagSysLogGlobalConfig {
int iCurrLofServer;
int iSendRate;
LOGHOST plServerList[SYSLOG_MAX_HOST];
LIST *plMsgBufList;
int iBufListSize;
BUFLISTELEMENT *ptBufInsertPos;
BUFLISTELEMENT *ptBufShowFirstPos;
int iConsoleSwitch;
int iConsoleServity;
ulong_t ulConsolMessages;
int iMonitorSwitch;
int iMonitorServity;
ulong_t ulMonitorMessages;
int iFileSwitch;
int iFileServity;
char * logFileName;
MSG_Q_ID logMsgQ;
int iLogSocket;
int iAppendTime;
int iGlobalSwitch;
ulong_t ulDropMessage;
SEM_ID semMemCpy;
} SYSLOGCONF;
typedef struct tagLogHost{
ulong_t ulIpAddr; /*日志主机的IP地址 */
ulong_t ulLevel; /*日志主机的输出级别*/
ulong_t ulFacility; /*Unix系统定义的设备号,local0~local7(16~23);*/
ulong_t ulSwitch; /*表示当前日志主机的开关是否打开,0为打开*/
ulong_t ulMsgSent; /*发往该主机的日志中被丢弃的数目*/
ulong_t ulMsgdrop; /*丢弃报文数目*/
ulong_t ulPort;
} LOGHOST;
typedef struct tagBufListElement{
NODE link;
ulong_t ulGetTick;
ulong_t ulSec;
char* buf;
ulong_t ulInUse;
int iModule; /*module */
int iLevel; /*message level*/
}BUFLISTELEMENT;
typedef struct tSYSLOGMODULE{
char *pcModuleName; /*模块名称*/
char *pcFacility; /**/
int iModuleDebugSwitch;
} SYSLOGMODULE;