summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/ndb/basic.result8
-rw-r--r--ndb/include/logger/LogHandler.hpp29
-rw-r--r--ndb/include/logger/Logger.hpp2
-rw-r--r--ndb/src/common/logger/LogHandler.cpp51
-rw-r--r--ndb/src/common/logger/Logger.cpp4
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);
}
- }
+ }
}
//