From 159cada1e2b9ce1712b3f5f11cf3359920cfe858 Mon Sep 17 00:00:00 2001 From: Gavin Hurlbut Date: Sun, 24 Jul 2011 15:30:39 -0700 Subject: [PATCH] Merged loggingdefs.h into verbosedefs.h There's no point in having these separate. Now both VB_* and LOG_* are being defined by macros that will make maintenance simpler for the future. --- mythtv/libs/libmythbase/logging.cpp | 80 +++++++++++++++++----- mythtv/libs/libmythbase/logging.h | 1 - mythtv/libs/libmythbase/loggingdefs.h | 60 ---------------- mythtv/libs/libmythbase/mythlogging.h | 2 +- mythtv/libs/libmythbase/verbosedefs.h | 30 ++++++++ mythtv/programs/mythbackend/mainserver.cpp | 2 +- 6 files changed, 96 insertions(+), 79 deletions(-) delete mode 100644 mythtv/libs/libmythbase/loggingdefs.h diff --git a/mythtv/libs/libmythbase/logging.cpp b/mythtv/libs/libmythbase/logging.cpp index 1b9eafb321d..67a3545cd66 100644 --- a/mythtv/libs/libmythbase/logging.cpp +++ b/mythtv/libs/libmythbase/logging.cpp @@ -14,7 +14,6 @@ using namespace std; -#define _LogLevelNames_ #include "mythlogging.h" #include "logging.h" #include "mythconfig.h" @@ -95,13 +94,22 @@ typedef struct { bool additive; QString helpText; } VerboseDef; - typedef QMap VerboseMap; +typedef struct { + int value; + QString name; + char shortname; +} LoglevelDef; +typedef QMap LoglevelMap; + bool verboseInitialized = false; VerboseMap verboseMap; QMutex verboseMapMutex; +LoglevelMap loglevelMap; +QMutex loglevelMapMutex; + const uint64_t verboseDefaultInt = VB_GENERAL; const char *verboseDefaultStr = " general"; @@ -113,6 +121,7 @@ QString userDefaultValueStr = QString(verboseDefaultStr); bool haveUserDefaultValues = false; void verboseAdd(uint64_t mask, QString name, bool additive, QString helptext); +void loglevelAdd(int value, QString name, char shortname); void verboseInit(void); void verboseHelp(); @@ -233,11 +242,22 @@ bool FileLogger::logmsg(LoggingItem_t *item) strcat( timestamp, usPart ); length = strlen( timestamp ); + char shortname; + + { + QMutexLocker locker(&loglevelMapMutex); + LoglevelMap::iterator it = loglevelMap.find(item->level); + if (it == loglevelMap.end()) + shortname = '-'; + else + shortname = (*it)->shortname; + } + if (m_fd == 1) { // Stdout snprintf( line, MAX_STRING_LENGTH, "%s %c %s\n", timestamp, - LogLevelShortNames[item->level], item->message ); + shortname, item->message ); } else { @@ -247,15 +267,13 @@ bool FileLogger::logmsg(LoggingItem_t *item) if( tid ) snprintf( line, MAX_STRING_LENGTH, "%s %c [%d/%d] %s %s:%d (%s) - %s\n", - timestamp, LogLevelShortNames[item->level], pid, tid, - threadName, item->file, item->line, item->function, - item->message ); + timestamp, shortname, pid, tid, threadName, item->file, + item->line, item->function, item->message ); else snprintf( line, MAX_STRING_LENGTH, "%s %c [%d] %s %s:%d (%s) - %s\n", - timestamp, LogLevelShortNames[item->level], pid, - threadName, item->file, item->line, item->function, - item->message ); + timestamp, shortname, pid, threadName, item->file, + item->line, item->function, item->message ); } int result = write( m_fd, line, strlen(line) ); @@ -867,7 +885,7 @@ void logPropagateCalc(void) if (logPropagateOpts.propagate) logPropagateArgs += " --logpath " + logPropagateOpts.path; - QString name = QString(LogLevelNames[logLevel]).toLower(); + QString name = logLevelGetName(logLevel); name.remove(0, 4); logPropagateArgs += " --loglevel " + name; @@ -905,8 +923,8 @@ void logStart(QString logfile, int quiet, bool daemon, int facility, return; logLevel = level; - LOG(VB_GENERAL, LOG_CRIT, QString("Setting Log Level to %1") - .arg(LogLevelNames[logLevel])); + LOG(VB_GENERAL, LOG_CRIT, QString("Setting Log Level to LOG_%1") + .arg(logLevelGetName(logLevel).toUpper())); logPropagateOpts.propagate = propagate; logPropagateOpts.quiet = quiet; @@ -1055,16 +1073,29 @@ LogLevel_t logLevelGet(QString level) { int i; - level = "LOG_" + level.toUpper(); - for( i = LOG_EMERG; i < LOG_UNKNOWN; i++ ) + QMutexLocker locker(&loglevelMapMutex); + + for( LoglevelMap::iterator it = loglevelMap.begin(); + it != loglevelMap.end(); it++) { - if( level == LogLevelNames[i] ) - return (LogLevel_t)i; + LoglevelDef *item = (*it); + if ( item->name == level.toLower() ) + return (LogLevel_t)item->value; } return LOG_UNKNOWN; } +QString logLevelGetName(LogLevel_t level) +{ + QMutexLocker locker(&loglevelMapMutex); + LoglevelMap::iterator it = loglevelMap.find((int)level); + + if ( it == loglevelMap.end() ) + return QString("unknown"); + + return (*it)->name; +} void verboseAdd(uint64_t mask, QString name, bool additive, QString helptext) { @@ -1083,10 +1114,27 @@ void verboseAdd(uint64_t mask, QString name, bool additive, QString helptext) verboseMap.insert(name, item); } +void loglevelAdd(int value, QString name, char shortname) +{ + LoglevelDef *item = new LoglevelDef; + + item->value = value; + name.detach(); + // LOG_CRIT -> crit + name.remove(0, 4); + name = name.toLower(); + item->name = name; + item->shortname = shortname; + + loglevelMap.insert(value, item); +} + void verboseInit(void) { QMutexLocker locker(&verboseMapMutex); + QMutexLocker locker2(&loglevelMapMutex); verboseMap.clear(); + loglevelMap.clear(); // This looks funky, so I'll put some explanation here. The verbosedefs.h // file gets included as part of the mythlogging.h include, and at that diff --git a/mythtv/libs/libmythbase/logging.h b/mythtv/libs/libmythbase/logging.h index 3acad75fb8a..755b9ade51a 100644 --- a/mythtv/libs/libmythbase/logging.h +++ b/mythtv/libs/libmythbase/logging.h @@ -15,7 +15,6 @@ #include "mythbaseexp.h" // MBASE_PUBLIC , etc. #include "verbosedefs.h" -#include "loggingdefs.h" #define LOGLINE_MAX 2048 diff --git a/mythtv/libs/libmythbase/loggingdefs.h b/mythtv/libs/libmythbase/loggingdefs.h deleted file mode 100644 index bd33dcbb648..00000000000 --- a/mythtv/libs/libmythbase/loggingdefs.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef LOGGINGDEFS_H_ -#define LOGGINGDEFS_H_ - -#include "mythbaseexp.h" // MBASE_PUBLIC , etc. - -typedef enum -{ - LOG_ANY = -1, // For use with masking, not actual logging - LOG_EMERG = 0, - LOG_ALERT, - LOG_CRIT, - LOG_ERR, - LOG_WARNING, - LOG_NOTICE, - LOG_INFO, - LOG_DEBUG, - LOG_UNKNOWN -} LogLevel_t; - -extern MBASE_PUBLIC const char *LogLevelNames[]; -extern MBASE_PUBLIC int LogLevelNameCount; -extern MBASE_PUBLIC const char LogLevelShortNames[]; -extern MBASE_PUBLIC int LogLevelShortNameCount; - -#ifdef _LogLevelNames_ -const char *LogLevelNames[] = -{ - "LOG_EMERG", - "LOG_ALERT", - "LOG_CRIT", - "LOG_ERR", - "LOG_WARNING", - "LOG_NOTICE", - "LOG_INFO", - "LOG_DEBUG", - "LOG_UNKNOWN" -}; -int LogLevelNameCount = sizeof(LogLevelNames) / sizeof(LogLevelNames[0]); - -const char LogLevelShortNames[] = -{ - '!', - 'A', - 'C', - 'E', - 'W', - 'N', - 'I', - 'D', - '-' -}; -int LogLevelShortNameCount = sizeof(LogLevelShortNames) / - sizeof(LogLevelShortNames[0]); -#endif - -#endif - -/* - * vim:ts=4:sw=4:ai:et:si:sts=4 - */ diff --git a/mythtv/libs/libmythbase/mythlogging.h b/mythtv/libs/libmythbase/mythlogging.h index 668e6792b38..705a6ecbb74 100644 --- a/mythtv/libs/libmythbase/mythlogging.h +++ b/mythtv/libs/libmythbase/mythlogging.h @@ -8,7 +8,6 @@ #include #include "mythbaseexp.h" // MBASE_PUBLIC , etc. -#include "loggingdefs.h" #include "verbosedefs.h" #ifdef __cplusplus @@ -64,6 +63,7 @@ MBASE_PUBLIC void threadRegister(QString name); MBASE_PUBLIC void threadDeregister(void); MBASE_PUBLIC int syslogGetFacility(QString facility); MBASE_PUBLIC LogLevel_t logLevelGet(QString level); +MBASE_PUBLIC QString logLevelGetName(LogLevel_t level); MBASE_PUBLIC int verboseArgParse(QString arg); /// Verbose helper function for ENO macro diff --git a/mythtv/libs/libmythbase/verbosedefs.h b/mythtv/libs/libmythbase/verbosedefs.h index c6ff37ba85e..345bc5187a1 100644 --- a/mythtv/libs/libmythbase/verbosedefs.h +++ b/mythtv/libs/libmythbase/verbosedefs.h @@ -26,6 +26,10 @@ #undef VERBOSE_POSTAMBLE #undef VERBOSE_MAP +#undef LOGLEVEL_PREAMBLE +#undef LOGLEVEL_POSTAMBLE +#undef LOGLEVEL_MAP + #ifdef _IMPLEMENT_VERBOSE // This is used to actually implement the mask in mythlogging.cpp @@ -34,6 +38,11 @@ #define VERBOSE_MAP(name,mask,additive,help) \ verboseAdd((uint64_t)(mask),QString(#name),(bool)(additive),QString(help)); +#define LOGLEVEL_PREAMBLE +#define LOGLEVEL_POSTAMBLE +#define LOGLEVEL_MAP(name,value,shortname) \ + loglevelAdd((int)(value),QString(#name),(char)(shortname)); + #else // !defined(_IMPLEMENT_VERBOSE) // This is used to define the enumerated type (used by all files) @@ -45,6 +54,13 @@ #define VERBOSE_MAP(name,mask,additive,help) \ name = (uint64_t)(mask), +#define LOGLEVEL_PREAMBLE \ + typedef enum { +#define LOGLEVEL_POSTAMBLE \ + } LogLevel_t; +#define LOGLEVEL_MAP(name,value,shortname) \ + name = (int)(value), + #endif VERBOSE_PREAMBLE @@ -128,4 +144,18 @@ VERBOSE_MAP(VB_NONE, 0x00000000, false, "NO debug output") VERBOSE_POSTAMBLE + +LOGLEVEL_PREAMBLE +LOGLEVEL_MAP(LOG_ANY, -1, ' ') +LOGLEVEL_MAP(LOG_EMERG, 0, '!') +LOGLEVEL_MAP(LOG_ALERT, 1, 'A') +LOGLEVEL_MAP(LOG_CRIT, 2, 'C') +LOGLEVEL_MAP(LOG_ERR, 3, 'E') +LOGLEVEL_MAP(LOG_WARNING, 4, 'W') +LOGLEVEL_MAP(LOG_NOTICE, 5, 'N') +LOGLEVEL_MAP(LOG_INFO, 6, 'I') +LOGLEVEL_MAP(LOG_DEBUG, 7, 'D') +LOGLEVEL_MAP(LOG_UNKNOWN, 8, '-') +LOGLEVEL_POSTAMBLE + #endif diff --git a/mythtv/programs/mythbackend/mainserver.cpp b/mythtv/programs/mythbackend/mainserver.cpp index 4e90f361907..1ababc23e42 100644 --- a/mythtv/programs/mythbackend/mainserver.cpp +++ b/mythtv/programs/mythbackend/mainserver.cpp @@ -5151,7 +5151,7 @@ void MainServer::HandleSetLogLevel(QStringList &slist, PlaybackSock *pbs) logPropagateCalc(); LOG(VB_GENERAL, LOG_NOTICE, QString("Log level changed, new level is: %1") - .arg(LogLevelNames[logLevel])); + .arg(logLevelGetName(logLevel))); retlist << "OK"; }