📄 eventlogger.cpp
字号:
}void getTextSingleUser(QQQQ) { switch (theData[1]) { case 0: BaseString::snprintf(m_text, m_text_len, "Entering single user mode"); break; case 1: BaseString::snprintf(m_text, m_text_len, "Entered single user mode " "Node %d has exclusive access", theData[2]); break; case 2: BaseString::snprintf(m_text, m_text_len,"Exiting single user mode"); break; default: BaseString::snprintf(m_text, m_text_len, "Unknown single user report %d", theData[1]); break; }}void getTextStartReport(QQQQ) { Uint32 time = theData[2]; Uint32 sz = theData[3]; char mask1[100]; char mask2[100]; char mask3[100]; char mask4[100]; BitmaskImpl::getText(sz, theData + 4 + (0 * sz), mask1); BitmaskImpl::getText(sz, theData + 4 + (1 * sz), mask2); BitmaskImpl::getText(sz, theData + 4 + (2 * sz), mask3); BitmaskImpl::getText(sz, theData + 4 + (3 * sz), mask4); switch(theData[1]){ case 1: // Wait initial BaseString::snprintf (m_text, m_text_len, "Initial start, waiting for %s to connect, " " nodes [ all: %s connected: %s no-wait: %s ]", mask4, mask1, mask2, mask3); break; case 2: // Wait partial BaseString::snprintf (m_text, m_text_len, "Waiting until nodes: %s connects, " "nodes [ all: %s connected: %s no-wait: %s ]", mask4, mask1, mask2, mask3); break; case 3: // Wait partial timeout BaseString::snprintf (m_text, m_text_len, "Waiting %u sec for nodes %s to connect, " "nodes [ all: %s connected: %s no-wait: %s ]", time, mask4, mask1, mask2, mask3); break; case 4: // Wait partioned BaseString::snprintf (m_text, m_text_len, "Waiting for non partitioned start, " "nodes [ all: %s connected: %s missing: %s no-wait: %s ]", mask1, mask2, mask4, mask3); break; case 5: BaseString::snprintf (m_text, m_text_len, "Waiting %u sec for non partitioned start, " "nodes [ all: %s connected: %s missing: %s no-wait: %s ]", time, mask1, mask2, mask4, mask3); break; case 0x8000: // Do initial BaseString::snprintf (m_text, m_text_len, "Initial start with nodes %s [ missing: %s no-wait: %s ]", mask2, mask4, mask3); break; case 0x8001: // Do start BaseString::snprintf (m_text, m_text_len, "Start with all nodes %s", mask2); break; case 0x8002: // Do partial BaseString::snprintf (m_text, m_text_len, "Start with nodes %s [ missing: %s no-wait: %s ]", mask2, mask4, mask3); break; case 0x8003: // Do partioned BaseString::snprintf (m_text, m_text_len, "Start potentially partitioned with nodes %s " " [ missing: %s no-wait: %s ]", mask2, mask4, mask3); break; default: BaseString::snprintf (m_text, m_text_len, "Unknown startreport: 0x%x [ %s %s %s %s ]", theData[1], mask1, mask2, mask3, mask4); }}#if 0BaseString::snprintf(m_text, m_text_len, "Unknown event: %d", theData[0]);#endif/** * This matrix defines which event should be printed when * * threshold - is in range [0-15] * severity - DEBUG to ALERT (Type of log message) */#define ROW(a,b,c,d) \{ NDB_LE_ ## a, b, c, d, getText ## a}const EventLoggerBase::EventRepLogLevelMatrix EventLoggerBase::matrix[] = { // CONNECTION ROW(Connected, LogLevel::llConnection, 8, Logger::LL_INFO ), ROW(Disconnected, LogLevel::llConnection, 8, Logger::LL_ALERT ), ROW(CommunicationClosed, LogLevel::llConnection, 8, Logger::LL_INFO ), ROW(CommunicationOpened, LogLevel::llConnection, 8, Logger::LL_INFO ), ROW(ConnectedApiVersion, LogLevel::llConnection, 8, Logger::LL_INFO ), // CHECKPOINT ROW(GlobalCheckpointStarted, LogLevel::llCheckpoint, 9, Logger::LL_INFO ), ROW(GlobalCheckpointCompleted,LogLevel::llCheckpoint,10, Logger::LL_INFO ), ROW(LocalCheckpointStarted, LogLevel::llCheckpoint, 7, Logger::LL_INFO ), ROW(LocalCheckpointCompleted,LogLevel::llCheckpoint, 8, Logger::LL_INFO ), ROW(LCPStoppedInCalcKeepGci, LogLevel::llCheckpoint, 0, Logger::LL_ALERT ), ROW(LCPFragmentCompleted, LogLevel::llCheckpoint, 11, Logger::LL_INFO ), ROW(UndoLogBlocked, LogLevel::llCheckpoint, 7, Logger::LL_INFO ), // STARTUP ROW(NDBStartStarted, LogLevel::llStartUp, 1, Logger::LL_INFO ), ROW(NDBStartCompleted, LogLevel::llStartUp, 1, Logger::LL_INFO ), ROW(STTORRYRecieved, LogLevel::llStartUp, 15, Logger::LL_INFO ), ROW(StartPhaseCompleted, LogLevel::llStartUp, 4, Logger::LL_INFO ), ROW(CM_REGCONF, LogLevel::llStartUp, 3, Logger::LL_INFO ), ROW(CM_REGREF, LogLevel::llStartUp, 8, Logger::LL_INFO ), ROW(FIND_NEIGHBOURS, LogLevel::llStartUp, 8, Logger::LL_INFO ), ROW(NDBStopStarted, LogLevel::llStartUp, 1, Logger::LL_INFO ), ROW(NDBStopCompleted, LogLevel::llStartUp, 1, Logger::LL_INFO ), ROW(NDBStopForced, LogLevel::llStartUp, 1, Logger::LL_ALERT ), ROW(NDBStopAborted, LogLevel::llStartUp, 1, Logger::LL_INFO ), ROW(StartREDOLog, LogLevel::llStartUp, 10, Logger::LL_INFO ), ROW(StartLog, LogLevel::llStartUp, 10, Logger::LL_INFO ), ROW(UNDORecordsExecuted, LogLevel::llStartUp, 15, Logger::LL_INFO ), ROW(StartReport, LogLevel::llStartUp, 4, Logger::LL_INFO ), // NODERESTART ROW(NR_CopyDict, LogLevel::llNodeRestart, 8, Logger::LL_INFO ), ROW(NR_CopyDistr, LogLevel::llNodeRestart, 8, Logger::LL_INFO ), ROW(NR_CopyFragsStarted, LogLevel::llNodeRestart, 8, Logger::LL_INFO ), ROW(NR_CopyFragDone, LogLevel::llNodeRestart,10, Logger::LL_INFO ), ROW(NR_CopyFragsCompleted, LogLevel::llNodeRestart, 8, Logger::LL_INFO ), ROW(NodeFailCompleted, LogLevel::llNodeRestart, 8, Logger::LL_ALERT), ROW(NODE_FAILREP, LogLevel::llNodeRestart, 8, Logger::LL_ALERT), ROW(ArbitState, LogLevel::llNodeRestart, 6, Logger::LL_INFO ), ROW(ArbitResult, LogLevel::llNodeRestart, 2, Logger::LL_ALERT), ROW(GCP_TakeoverStarted, LogLevel::llNodeRestart, 7, Logger::LL_INFO ), ROW(GCP_TakeoverCompleted, LogLevel::llNodeRestart, 7, Logger::LL_INFO ), ROW(LCP_TakeoverStarted, LogLevel::llNodeRestart, 7, Logger::LL_INFO ), ROW(LCP_TakeoverCompleted, LogLevel::llNodeRestart, 7, Logger::LL_INFO ), // STATISTIC ROW(TransReportCounters, LogLevel::llStatistic, 8, Logger::LL_INFO ), ROW(OperationReportCounters, LogLevel::llStatistic, 8, Logger::LL_INFO ), ROW(TableCreated, LogLevel::llStatistic, 7, Logger::LL_INFO ), ROW(JobStatistic, LogLevel::llStatistic, 9, Logger::LL_INFO ), ROW(SendBytesStatistic, LogLevel::llStatistic, 9, Logger::LL_INFO ), ROW(ReceiveBytesStatistic, LogLevel::llStatistic, 9, Logger::LL_INFO ), ROW(MemoryUsage, LogLevel::llStatistic, 5, Logger::LL_INFO ), // ERROR ROW(TransporterError, LogLevel::llError, 2, Logger::LL_ERROR ), ROW(TransporterWarning, LogLevel::llError, 8, Logger::LL_WARNING ), ROW(MissedHeartbeat, LogLevel::llError, 8, Logger::LL_WARNING ), ROW(DeadDueToHeartbeat, LogLevel::llError, 8, Logger::LL_ALERT ), ROW(WarningEvent, LogLevel::llError, 2, Logger::LL_WARNING ), // INFO ROW(SentHeartbeat, LogLevel::llInfo, 12, Logger::LL_INFO ), ROW(CreateLogBytes, LogLevel::llInfo, 11, Logger::LL_INFO ), ROW(InfoEvent, LogLevel::llInfo, 2, Logger::LL_INFO ), //Single User ROW(SingleUser, LogLevel::llInfo, 7, Logger::LL_INFO ), // Backup ROW(BackupStarted, LogLevel::llBackup, 7, Logger::LL_INFO ), ROW(BackupCompleted, LogLevel::llBackup, 7, Logger::LL_INFO ), ROW(BackupFailedToStart, LogLevel::llBackup, 7, Logger::LL_ALERT), ROW(BackupAborted, LogLevel::llBackup, 7, Logger::LL_ALERT )};const Uint32 EventLoggerBase::matrixSize=sizeof(EventLoggerBase::matrix)/sizeof(EventRepLogLevelMatrix);EventLogger::EventLogger() : m_filterLevel(15){ setCategory("EventLogger"); enable(Logger::LL_INFO, Logger::LL_ALERT); }EventLogger::~EventLogger(){}boolEventLogger::open(const char* logFileName, int maxNoFiles, long maxFileSize, unsigned int maxLogEntries){ return addHandler(new FileLogHandler(logFileName, maxNoFiles, maxFileSize, maxLogEntries));}voidEventLogger::close(){ removeAllHandlers();}static NdbOut&operator<<(NdbOut& out, const LogLevel & ll){ out << "[LogLevel: "; for(size_t i = 0; i<LogLevel::LOGLEVEL_CATEGORIES; i++) out << ll.getLogLevel((LogLevel::EventCategory)i) << " "; out << "]"; return out;}intEventLoggerBase::event_lookup(int eventType, LogLevel::EventCategory &cat, Uint32 &threshold, Logger::LoggerLevel &severity, EventTextFunction &textF){ for(unsigned i = 0; i<EventLoggerBase::matrixSize; i++){ if(EventLoggerBase::matrix[i].eventType == eventType){ cat = EventLoggerBase::matrix[i].eventCategory; threshold = EventLoggerBase::matrix[i].threshold; severity = EventLoggerBase::matrix[i].severity; textF= EventLoggerBase::matrix[i].textF; return 0; } } return 1;}const char*EventLogger::getText(char * dst, size_t dst_len, EventTextFunction textF, const Uint32* theData, NodeId nodeId ){ int pos= 0; if (nodeId != 0) { BaseString::snprintf(dst, dst_len, "Node %u: ", nodeId); pos= strlen(dst); } if (dst_len-pos > 0) textF(dst+pos,dst_len-pos,theData); return dst;}void EventLogger::log(int eventType, const Uint32* theData, NodeId nodeId, const LogLevel* ll){ Uint32 threshold = 0; Logger::LoggerLevel severity = Logger::LL_WARNING; LogLevel::EventCategory cat= LogLevel::llInvalid; EventTextFunction textF; DBUG_ENTER("EventLogger::log"); DBUG_PRINT("enter",("eventType=%d, nodeid=%d", eventType, nodeId)); if (EventLoggerBase::event_lookup(eventType,cat,threshold,severity,textF)) DBUG_VOID_RETURN; Uint32 set = ll?ll->getLogLevel(cat) : m_logLevel.getLogLevel(cat); DBUG_PRINT("info",("threshold=%d, set=%d", threshold, set)); if (ll) DBUG_PRINT("info",("m_logLevel.getLogLevel=%d", m_logLevel.getLogLevel(cat))); if (threshold <= set){ getText(m_text,sizeof(m_text),textF,theData,nodeId); switch (severity){ case Logger::LL_ALERT: alert(m_text); break; case Logger::LL_CRITICAL: critical(m_text); break; case Logger::LL_WARNING: warning(m_text); break; case Logger::LL_ERROR: error(m_text); break; case Logger::LL_INFO: info(m_text); break; case Logger::LL_DEBUG: debug(m_text); break; default: info(m_text); break; } } // if (.. DBUG_VOID_RETURN;}intEventLogger::getFilterLevel() const{ return m_filterLevel;}void EventLogger::setFilterLevel(int filterLevel){ m_filterLevel = filterLevel;}//// PRIVATE//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -