diff options
-rw-r--r-- | mysql-test/ndb/basic.result | 8 | ||||
-rw-r--r-- | ndb/include/logger/LogHandler.hpp | 29 | ||||
-rw-r--r-- | ndb/include/logger/Logger.hpp | 2 | ||||
-rw-r--r-- | ndb/src/common/logger/LogHandler.cpp | 51 | ||||
-rw-r--r-- | ndb/src/common/logger/Logger.cpp | 4 |
5 files changed, 47 insertions, 47 deletions
diff --git a/mysql-test/ndb/basic.result b/mysql-test/ndb/basic.result index 7049c02f304..5ebd20a7f83 100644 --- a/mysql-test/ndb/basic.result +++ b/mysql-test/ndb/basic.result @@ -31,12 +31,12 @@ QUIT Quit management client <id> = ALL | Any database node id Connected to Management Server at: localhost:1186 -Node 1: started (Version 4.1.8) -Node 2: started (Version 4.1.8) +Node 1: started (Version 4.1.9) +Node 2: started (Version 4.1.9) -Node 1: started (Version 4.1.8) +Node 1: started (Version 4.1.9) -Node 2: started (Version 4.1.8) +Node 2: started (Version 4.1.9) Executing CLUSTERLOG on node 1 OK! Executing CLUSTERLOG on node 2 OK! diff --git a/ndb/include/logger/LogHandler.hpp b/ndb/include/logger/LogHandler.hpp index 57169e7ae6a..7df6ad864e5 100644 --- a/ndb/include/logger/LogHandler.hpp +++ b/ndb/include/logger/LogHandler.hpp @@ -19,7 +19,6 @@ #include "Logger.hpp" - /** * This class is the base class for all log handlers. A log handler is * responsible for formatting and writing log messages to a specific output. @@ -68,7 +67,8 @@ public: /** * Append a log message to the output stream/file whatever. * append() will call writeHeader(), writeMessage() and writeFooter() for - * a child class and in that order. + * a child class and in that order. Append checks for repeated messages. + * append_impl() does not check for repeats. * * @param pCategory the category/name to tag the log entry with. * @param level the log level. @@ -76,6 +76,8 @@ public: */ void append(const char* pCategory, Logger::LoggerLevel level, const char* pMsg); + void append_impl(const char* pCategory, Logger::LoggerLevel level, + const char* pMsg); /** * Returns a default formatted header. It currently has the @@ -112,14 +114,6 @@ public: void setDateTimeFormat(const char* pFormat); /** - * Returns a string date and time string. - * - * @param pStr a string. - * @return a string with date and time. - */ - char* getTimeAsString(char* pStr) const; - - /** * Returns the error code. */ int getErrorCode() const; @@ -185,6 +179,15 @@ protected: virtual void writeFooter() = 0; private: + /** + * Returns a string date and time string. + * @note does not update time, uses m_now as time + * @param pStr a string. + * @return a string with date and time. + */ + char* getTimeAsString(char* pStr) const; + time_t m_now; + /** Prohibit */ LogHandler(const LogHandler&); LogHandler* operator = (const LogHandler&); @@ -197,11 +200,9 @@ private: unsigned m_count_repeated_messages; unsigned m_max_repeat_frequency; time_t m_last_log_time; - char m_last_category_buf[16]; - char m_last_message_buf[256]; - char *m_last_category; + char m_last_category[MAX_HEADER_LENGTH]; + char m_last_message[MAX_LOG_MESSAGE_SIZE]; Logger::LoggerLevel m_last_level; - char *m_last_message; }; #endif diff --git a/ndb/include/logger/Logger.hpp b/ndb/include/logger/Logger.hpp index f12297023b7..ee762098fb6 100644 --- a/ndb/include/logger/Logger.hpp +++ b/ndb/include/logger/Logger.hpp @@ -20,6 +20,8 @@ #include <ndb_global.h> #include <BaseString.hpp> +#define MAX_LOG_MESSAGE_SIZE 1024 + class LogHandler; class LogHandlerList; diff --git a/ndb/src/common/logger/LogHandler.cpp b/ndb/src/common/logger/LogHandler.cpp index 5cc8de21f67..e038b05401e 100644 --- a/ndb/src/common/logger/LogHandler.cpp +++ b/ndb/src/common/logger/LogHandler.cpp @@ -23,21 +23,18 @@ // LogHandler::LogHandler() : m_pDateTimeFormat("%d-%.2d-%.2d %.2d:%.2d:%.2d"), - m_errorCode(0), - m_last_category(m_last_category_buf), - m_last_message(m_last_message_buf) + m_errorCode(0) { m_max_repeat_frequency= 3; // repeat messages maximum every 3 seconds - m_last_category_buf[0]= 0; - m_last_message_buf[0]= 0; + m_count_repeated_messages= 0; + m_last_category[0]= 0; + m_last_message[0]= 0; + m_last_log_time= 0; + m_now= 0; } LogHandler::~LogHandler() { - if (m_last_message != m_last_message_buf) - free(m_last_message); - if (m_last_category != m_last_category_buf) - free(m_last_category); } void @@ -51,42 +48,44 @@ LogHandler::append(const char* pCategory, Logger::LoggerLevel level, strcmp(pCategory, m_last_category) || strcmp(pMsg, m_last_message)) { - if (m_last_message != m_last_message_buf) - free(m_last_message); - if (m_last_category != m_last_category_buf) - free(m_last_category); - - m_count_repeated_messages= 0; + if (m_count_repeated_messages > 0) // print that message + append_impl(m_last_category, m_last_level, m_last_message); m_last_level= level; - BaseString::snprintf(m_last_category_buf, sizeof(m_last_category_buf), "%s", pCategory); - BaseString::snprintf(m_last_message_buf, sizeof(m_last_message_buf), "%s", pMsg); - // ToDo: handle too long messages correctly - // right now all that will happen is that too long messages - // will be repeated unneccesarily + strncpy(m_last_category, pCategory, sizeof(m_last_category)); + strncpy(m_last_message, pMsg, sizeof(m_last_message)); } else // repeated message { if (now < m_last_log_time+m_max_repeat_frequency) { m_count_repeated_messages++; + m_now= now; return; } } + m_now= now; + + append_impl(pCategory, level, pMsg); + m_last_log_time= now; +} + +void +LogHandler::append_impl(const char* pCategory, Logger::LoggerLevel level, + const char* pMsg) +{ writeHeader(pCategory, level); if (m_count_repeated_messages == 0) writeMessage(pMsg); else { BaseString str(pMsg); - str.appfmt(" - repeated %d times", m_count_repeated_messages); + str.appfmt(" - Repeated %d times", m_count_repeated_messages); writeMessage(str.c_str()); m_count_repeated_messages= 0; } writeFooter(); - - m_last_log_time= now; } const char* @@ -125,12 +124,10 @@ char* LogHandler::getTimeAsString(char* pStr) const { struct tm* tm_now; - time_t now; - now = ::time((time_t*)NULL); #ifdef NDB_WIN32 - tm_now = localtime(&now); + tm_now = localtime(&m_now); #else - tm_now = ::localtime(&now); //uses the "current" timezone + tm_now = ::localtime(&m_now); //uses the "current" timezone #endif BaseString::snprintf(pStr, MAX_DATE_TIME_HEADER_LENGTH, diff --git a/ndb/src/common/logger/Logger.cpp b/ndb/src/common/logger/Logger.cpp index 4fa7b462563..7f18f5bd3ec 100644 --- a/ndb/src/common/logger/Logger.cpp +++ b/ndb/src/common/logger/Logger.cpp @@ -355,11 +355,11 @@ Logger::log(LoggerLevel logLevel, const char* pMsg, va_list ap) const LogHandler* pHandler = NULL; while ( (pHandler = m_pHandlerList->next()) != NULL) { - char buf[1024]; + char buf[MAX_LOG_MESSAGE_SIZE]; BaseString::vsnprintf(buf, sizeof(buf), pMsg, ap); pHandler->append(m_pCategory, logLevel, buf); } - } + } } // |