Main Page | Modules | Data Structures | File List | Data Fields | Related Pages

errmanager.c

00001 #include "errmanager.h"
00002 #include "dbug_mem.h"
00003 
00004 
00005 emData emd;
00006 
00007 int emInit(int logLevel, 
00008    int logType, 
00009    void (*cb)(void *ctxt, char *pFile, char *pFunc, int iLine, int level, char *fmt), 
00010    void *ctxt, 
00011    char *filename)
00012 {
00013    memset(&emd, 0, sizeof(emData));
00014 
00015    switch(logType) {
00016    case EM_TYPE_SYSLOG:
00017       emd.logLevel    = logLevel;
00018       emd.logType     = logType;
00019       emd.errCallBack = NULL;
00020       emd.ctxt        = NULL;
00021       emd.filename    = NULL;
00022       openlog(PACKAGE, LOG_CONS|LOG_PID, LOG_USER);
00023       break;
00024    case EM_TYPE_STDERR:
00025       emd.logLevel    = logLevel;
00026       emd.logType     = logType;
00027       emd.errCallBack = NULL;
00028       emd.ctxt        = NULL;
00029       emd.filename    = NULL;
00030       openlog(PACKAGE, LOG_CONS|LOG_PERROR, LOG_USER);
00031       break;
00032    case EM_TYPE_CALLBACK:
00033       emd.logLevel    = logLevel;
00034       emd.logType     = logType;
00035       if(cb == NULL) {
00036          printf("Need a callback funtion by EM_TYPE_CALLBACK");
00037          return -1;
00038       } else {
00039          emd.errCallBack = cb;
00040          emd.ctxt = ctxt;
00041       }
00042       emd.filename    = NULL;
00043       break;
00044    default:
00045       printf("Not Supported");
00046       return -1;
00047       break;
00048    }
00049    
00050    return 0;
00051 }
00052 
00053 int reentrant=0;
00054 void emManager(char* pFile, char* pFunc, int iLine, int level, char* fmt, ...)
00055 {
00056    va_list arglist;
00057    char msgbuf[MAX_STRLEN];
00058    char debuginfos[LOG_DEBUG+1][20] = {
00059       "EMERG:",
00060       "ALERT:",
00061       "CRIT:",
00062       "ERROR:",
00063       "WARNING:",
00064       "NOTICE:",
00065       "INFO:",
00066       "DEBUG:"
00067    };
00068 
00069    if (reentrant > 0){
00070       return;
00071    }  
00072    reentrant++;
00073 
00074    va_start(arglist, fmt);
00075     vsnprintf(msgbuf, MAX_STRLEN, fmt, arglist);
00076    va_end(arglist);
00077    
00078    if(emd.logLevel >= level) {
00079       if(emd.logLevel == LOG_DEBUG && emd.logType != EM_TYPE_CALLBACK) {
00080          syslog(level, "%-9s%s:%d: %s", debuginfos[level], pFile, iLine, msgbuf);
00081          /*syslog(level, "%-9s%s:%s():%d: %s", debuginfos[level], pFile, pFunc, iLine, msgbuf);*/
00082          /*syslog(level, "[%5d;%3d.%3d] %18s:%4d %s", getpid(), getuid(), 
00083             getgid(), pFile, iLine, msgbuf);*/
00084       } else if(emd.logType != EM_TYPE_CALLBACK) {
00085          syslog(level, "%-9s%s", debuginfos[level], msgbuf);
00086          /*syslog(level, "%s", msgbuf);*/
00087       } else {
00088          emd.errCallBack(emd.ctxt, pFile, pFunc, iLine, level, msgbuf);
00089       }
00090    }
00091    reentrant--;
00092 }

Generated on Thu May 27 23:27:28 2004 for Mntd by doxygen 1.3.5