changed log file format
authorVictor Kirhenshtein <victor@netxms.org>
Fri, 13 Oct 2017 10:55:04 +0000 (13:55 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Fri, 13 Oct 2017 10:55:04 +0000 (13:55 +0300)
doc/internal/debug_tags.txt [new file with mode: 0644]
src/libnetxms/log.cpp
src/server/core/hk.cpp
src/server/libnxsrv/messages.mc

diff --git a/doc/internal/debug_tags.txt b/doc/internal/debug_tags.txt
new file mode 100644 (file)
index 0000000..fea742c
--- /dev/null
@@ -0,0 +1,14 @@
+db.*           Database related
+db.query       SQL query trace
+db.sessions    DB sessions (connections)
+db.cpool       DB connection pool
+
+housekeeper    Housekeeper messages
+
+objects.*      Object related trace
+objects.dc.*   Data collection related
+objects.locks.*        Locks
+
+threads.*      Thread related
+
+
index db9566c..1ab1aab 100644 (file)
@@ -66,7 +66,7 @@ static MUTEX m_mutexDebugTagTreeWrite = INVALID_MUTEX_HANDLE;
 /**
  * Swaps tag tree pointers and waits till reader count drops to 0
  */
-static inline void swapAndWait()
+static inline void SwapAndWait()
 {
    tagTreeSecondary = InterlockedExchangeObjectPointer(&tagTreeActive, tagTreeSecondary);
    ThreadSleepMs(10);
@@ -85,7 +85,7 @@ void LIBNETXMS_EXPORTABLE nxlog_set_debug_level(int level)
    {
       MutexLock(m_mutexDebugTagTreeWrite);
       tagTreeSecondary->setRootDebugLvl(level); // Update the secondary tree
-      swapAndWait();
+      SwapAndWait();
       tagTreeSecondary->setRootDebugLvl(level); // Update the previously active tree
       MutexUnlock(m_mutexDebugTagTreeWrite);
    }
@@ -102,13 +102,13 @@ void LIBNETXMS_EXPORTABLE nxlog_set_debug_level_tag(const TCHAR *tag, int level)
       if((level >= 0) && (level <= 9))
       {
          tagTreeSecondary->add(tag, level);
-         swapAndWait();
+         SwapAndWait();
          tagTreeSecondary->add(tag, level);
       }
       else if (level < 0)
       {
          tagTreeSecondary->remove(tag);
-         swapAndWait();
+         SwapAndWait();
          tagTreeSecondary->remove(tag);
       }
       MutexUnlock(m_mutexDebugTagTreeWrite);
@@ -152,8 +152,8 @@ static TCHAR *FormatLogTimestamp(TCHAR *buffer)
 #else
        struct tm *loc = localtime(&t);
 #endif
-       _tcsftime(buffer, 32, _T("[%d-%b-%Y %H:%M:%S"), loc);
-       _sntprintf(&buffer[21], 8, _T(".%03d]"), (int)(now % 1000));
+       _tcsftime(buffer, 32, _T("[%Y.%m.%d %H:%M:%S"), loc);
+       _sntprintf(&buffer[20], 8, _T(".%03d]"), (int)(now % 1000));
        return buffer;
 }
 
@@ -512,30 +512,29 @@ void LIBNETXMS_EXPORTABLE nxlog_close()
 /**
  * Write record to log file
  */
-static void WriteLogToFile(TCHAR *message, const WORD wType)
+static void WriteLogToFile(TCHAR *message, const WORD type)
 {
-   TCHAR buffer[64];
-   TCHAR loglevel[64];
-
-   switch(wType) 
+   const TCHAR *loglevel;
+   switch(type)
    {
-      case EVENTLOG_ERROR_TYPE:
-             _sntprintf(loglevel, 16, _T("[%s] "), _T("ERROR"));
+      case NXLOG_ERROR:
+         loglevel = _T("*E* ");
              break;
-      case EVENTLOG_WARNING_TYPE:
-             _sntprintf(loglevel, 16, _T("[%s] "), _T("WARN "));
+      case NXLOG_WARNING:
+         loglevel = _T("*W* ");
              break;
-      case EVENTLOG_INFORMATION_TYPE:
-             _sntprintf(loglevel, 16, _T("[%s] "), _T("INFO "));
+      case NXLOG_INFO:
+         loglevel = _T("*I* ");
              break;
-      case EVENTLOG_DEBUG_TYPE:
-             _sntprintf(loglevel, 16, _T("[%s] "), _T("DEBUG"));
+      case NXLOG_DEBUG:
+         loglevel = _T("*D* ");
              break;
       default:
-         _tcsncpy(loglevel, _T(""), 1);
+         loglevel = _T("*?* ");
              break;
    }
 
+   TCHAR buffer[64];
    if (s_flags & NXLOG_BACKGROUND_WRITER)
    {
       MutexLock(m_mutexLogAccess);
@@ -915,12 +914,20 @@ void LIBNETXMS_EXPORTABLE nxlog_debug_tag(const TCHAR *tag, int level, const TCH
    if (level > nxlog_get_debug_level_tag(tag))
       return;
 
+   TCHAR tagf[16];
+   int i;
+   for(i = 0; (i < 15) && tag[i] != 0; i++)
+      tagf[i] = tag[i];
+   for(; i < 15; i++)
+      tagf[i] = ' ';
+   tagf[i] = 0;
+
    va_list args;
    va_start(args, format);
    TCHAR buffer[8192];
    _vsntprintf(buffer, 8192, format, args);
    va_end(args);
-   nxlog_write(s_debugMsgTag, NXLOG_DEBUG, "ss", tag, buffer);
+   nxlog_write(s_debugMsgTag, NXLOG_DEBUG, "ss", tagf, buffer);
 
    if (s_debugWriter != NULL)
       s_debugWriter(tag, buffer);
index ce4ea48..14c29fb 100644 (file)
@@ -22,6 +22,8 @@
 
 #include "nxcore.h"
 
+#define DEBUG_TAG _T("housekeeper")
+
 /**
  * Delete empty subnets from given list
  */
@@ -30,11 +32,11 @@ static void DeleteEmptySubnetsFromList(ObjectArray<NetObj> *subnets)
    for(int i = 0; i < subnets->size(); i++)
    {
       NetObj *object = subnets->get(i);
-      DbgPrintf(7, _T("DeleteEmptySubnets: checking subnet %s [%d] (refs: %d refs, children: %d, parents: %d)"),
+      nxlog_debug_tag(DEBUG_TAG, 7, _T("DeleteEmptySubnets: checking subnet %s [%d] (refs: %d refs, children: %d, parents: %d)"),
                 object->getName(), object->getId(), object->getRefCount(), object->getChildCount(), object->getParentCount());
       if (object->isEmpty())
       {
-         DbgPrintf(5, _T("DeleteEmptySubnets: delete subnet %s [%d] (refs: %d, children: %d, parents: %d)"),
+         nxlog_debug_tag(DEBUG_TAG, 5, _T("DeleteEmptySubnets: delete subnet %s [%d] (refs: %d, children: %d, parents: %d)"),
                    object->getName(), object->getId(), object->getRefCount(), object->getChildCount(), object->getParentCount());
          object->deleteObject();
       }
@@ -105,6 +107,7 @@ static void CleanAlarmHistory(DB_HANDLE hdb)
        if (retentionTime == 0)
                return;
 
+   nxlog_debug_tag(DEBUG_TAG, 2, _T("Clearing alarm log (retention time %d days)"), retentionTime);
        retentionTime *= 86400; // Convert days to seconds
        time_t ts = time(NULL) - (time_t)retentionTime;
 
@@ -175,7 +178,7 @@ static THREAD_RESULT THREAD_CALL HouseKeeper(void *pArg)
       minute = _tcstol(p, NULL, 10);
       if ((minute < 0) || (minute > 59))
       {
-         DbgPrintf(2, _T("Housekeeper: invalid minute value %s"), p);
+         nxlog_debug_tag(DEBUG_TAG, 2, _T("Invalid minute value %s"), p);
          minute = 0;
       }
    }
@@ -186,13 +189,13 @@ static THREAD_RESULT THREAD_CALL HouseKeeper(void *pArg)
    hour = _tcstol(buffer, NULL, 10);
    if ((hour < 0) || (hour > 23))
    {
-      DbgPrintf(2, _T("Housekeeper: invalid hour value %s"), buffer);
+      nxlog_debug_tag(DEBUG_TAG, 2, _T("Invalid hour value %s"), buffer);
       hour = 0;
    }
-   DbgPrintf(2, _T("Housekeeper: wakeup time is %02d:%02d"), hour, minute);
+   nxlog_debug_tag(DEBUG_TAG, 2, _T("Wakeup time is %02d:%02d"), hour, minute);
 
    int sleepTime = GetSleepTime(hour, minute, 0);
-   DbgPrintf(4, _T("Housekeeper: sleeping for %d seconds"), sleepTime);
+   nxlog_debug_tag(DEBUG_TAG, 2, _T("Sleeping for %d seconds"), sleepTime);
 
    while(!s_shutdown)
    {
@@ -200,7 +203,7 @@ static THREAD_RESULT THREAD_CALL HouseKeeper(void *pArg)
       if (s_shutdown)
          break;
 
-      DbgPrintf(4, _T("Housekeeper: wakeup"));
+      nxlog_debug_tag(DEBUG_TAG, 2, _T("Wakeup"));
 
                DB_HANDLE hdb = DBConnectionPoolAcquireConnection();
                CleanAlarmHistory(hdb);
@@ -211,6 +214,7 @@ static THREAD_RESULT THREAD_CALL HouseKeeper(void *pArg)
                UINT32 dwRetentionTime = ConfigReadULong(_T("EventLogRetentionTime"), 90);
                if (dwRetentionTime > 0)
                {
+             nxlog_debug_tag(DEBUG_TAG, 2, _T("Clearing event log (retention time %d days)"), dwRetentionTime);
                        dwRetentionTime *= 86400;       // Convert days to seconds
          TCHAR query[256];
                        _sntprintf(query, sizeof(query) / sizeof(TCHAR), _T("DELETE FROM event_log WHERE event_timestamp<%ld"), (long)(currTime - dwRetentionTime));
@@ -221,6 +225,7 @@ static THREAD_RESULT THREAD_CALL HouseKeeper(void *pArg)
                dwRetentionTime = ConfigReadULong(_T("SyslogRetentionTime"), 90);
                if (dwRetentionTime > 0)
                {
+         nxlog_debug_tag(DEBUG_TAG, 2, _T("Clearing syslog (retention time %d days)"), dwRetentionTime);
                        dwRetentionTime *= 86400;       // Convert days to seconds
          TCHAR query[256];
                        _sntprintf(query, sizeof(query) / sizeof(TCHAR), _T("DELETE FROM syslog WHERE msg_timestamp<%ld"), (long)(currTime - dwRetentionTime));
@@ -231,6 +236,7 @@ static THREAD_RESULT THREAD_CALL HouseKeeper(void *pArg)
                dwRetentionTime = ConfigReadULong(_T("AuditLogRetentionTime"), 90);
                if (dwRetentionTime > 0)
                {
+         nxlog_debug_tag(DEBUG_TAG, 2, _T("Clearing audit log (retention time %d days)"), dwRetentionTime);
                        dwRetentionTime *= 86400;       // Convert days to seconds
          TCHAR query[256];
                        _sntprintf(query, sizeof(query) / sizeof(TCHAR), _T("DELETE FROM audit_log WHERE timestamp<%ld"), (long)(currTime - dwRetentionTime));
@@ -241,6 +247,7 @@ static THREAD_RESULT THREAD_CALL HouseKeeper(void *pArg)
                dwRetentionTime = ConfigReadULong(_T("SNMPTrapLogRetentionTime"), 90);
                if (dwRetentionTime > 0)
                {
+         nxlog_debug_tag(DEBUG_TAG, 2, _T("Clearing SNMP trap log (retention time %d days)"), dwRetentionTime);
                        dwRetentionTime *= 86400;       // Convert days to seconds
          TCHAR query[256];
                        _sntprintf(query, sizeof(query) / sizeof(TCHAR), _T("DELETE FROM snmp_trap_log WHERE trap_timestamp<%ld"), (long)(currTime - dwRetentionTime));
@@ -252,6 +259,7 @@ static THREAD_RESULT THREAD_CALL HouseKeeper(void *pArg)
                        DeleteEmptySubnets();
 
                // Remove expired DCI data
+      nxlog_debug_tag(DEBUG_TAG, 2, _T("Clearing collected DCI data"));
                g_idxNodeById.forEach(CleanDciData, hdb);
                g_idxClusterById.forEach(CleanDciData, hdb);
                g_idxMobileDeviceById.forEach(CleanDciData, hdb);
@@ -264,7 +272,7 @@ static THREAD_RESULT THREAD_CALL HouseKeeper(void *pArg)
       {
          if (g_pModuleList[i].pfHousekeeperHook != NULL)
          {
-            DbgPrintf(5, _T("Housekeeper: calling hook in module %s"), g_pModuleList[i].szName);
+            nxlog_debug_tag(DEBUG_TAG, 3, _T("Housekeeper: calling hook in module %s"), g_pModuleList[i].szName);
             g_pModuleList[i].pfHousekeeperHook();
          }
       }
@@ -273,10 +281,10 @@ static THREAD_RESULT THREAD_CALL HouseKeeper(void *pArg)
 
       ThreadSleep(1);   // to prevent multiple executions if processing took less then 1 second
       sleepTime = GetSleepTime(hour, minute, 0);
-      DbgPrintf(4, _T("Housekeeper: sleeping for %d seconds"), sleepTime);
+      nxlog_debug_tag(DEBUG_TAG, 2, _T("Sleeping for %d seconds"), sleepTime);
    }
 
-   DbgPrintf(1, _T("Housekeeper thread terminated"));
+   nxlog_debug_tag(DEBUG_TAG, 1, _T("Housekeeper thread terminated"));
    return THREAD_OK;
 }
 
index e1f1be1..f8f1491 100644 (file)
@@ -1079,7 +1079,7 @@ Failed to load sensor object with id %1 from database
 MessageId=
 SymbolicName=MSG_DEBUG_TAG
 Language=English
-<%1> %2
+[%1] %2
 .
 
 MessageId=