diff options
author | kurtis.heimerl <kurtis.heimerl@19bc5d8c-e614-43d4-8b26-e1612bc8e597> | 2012-12-16 06:08:18 +0000 |
---|---|---|
committer | kurtis.heimerl <kurtis.heimerl@19bc5d8c-e614-43d4-8b26-e1612bc8e597> | 2012-12-16 06:08:18 +0000 |
commit | 00913d74d9d3d9e270a5624513adc3939b257ff1 (patch) | |
tree | 679554be25614c9fc9aff1741f8840d843f0d90e | |
parent | db70eb4c6e3837e0561be36fcc612f65722e037b (diff) |
Sylvain patch #2, with modifications:
CommonLibs: Avoid direct syslog calls in ConfigurationTable
We instead introduce a 'log early' facility in Logger.h to accomplish
the same
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
I added similar code to the reporting functions, which did not exist when sylvain made this patch
git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@4629 19bc5d8c-e614-43d4-8b26-e1612bc8e597
-rw-r--r-- | CommonLibs/Configuration.cpp | 24 | ||||
-rw-r--r-- | CommonLibs/Configuration.h | 4 | ||||
-rw-r--r-- | CommonLibs/ConfigurationTest.cpp | 2 | ||||
-rw-r--r-- | CommonLibs/Logger.cpp | 10 | ||||
-rw-r--r-- | CommonLibs/Logger.h | 2 |
5 files changed, 25 insertions, 17 deletions
diff --git a/CommonLibs/Configuration.cpp b/CommonLibs/Configuration.cpp index 7d0bea2..5dcc277 100644 --- a/CommonLibs/Configuration.cpp +++ b/CommonLibs/Configuration.cpp @@ -27,10 +27,11 @@ #include "Configuration.h" +#include "Logger.h" #include <fstream> #include <iostream> #include <string.h> -#include <syslog.h> + using namespace std; @@ -56,10 +57,9 @@ float ConfigurationRecord::floatNumber() const } -ConfigurationTable::ConfigurationTable(const char* filename, const char *wCmdName, int wFacility) - :mFacility(wFacility) +ConfigurationTable::ConfigurationTable(const char* filename, const char *wCmdName) { - syslog(LOG_INFO | mFacility, "opening configuration table from path %s", filename); + gLogEarly(LOG_INFO, "opening configuration table from path %s", filename); // Connect to the database. int rc = sqlite3_open(filename,&mDB); // (pat) When I used malloc here, sqlite3 sporadically crashes. @@ -69,14 +69,14 @@ ConfigurationTable::ConfigurationTable(const char* filename, const char *wCmdNam strcat(gCmdName,":"); } if (rc) { - syslog(LOG_EMERG | mFacility, "cannot open configuration database at %s, error message: %s", filename, sqlite3_errmsg(mDB)); + gLogEarly(LOG_EMERG, "cannot open configuration database at %s, error message: %s", filename, sqlite3_errmsg(mDB)); sqlite3_close(mDB); mDB = NULL; return; } // Create the table, if needed. if (!sqlite3_command(mDB,createConfigTable)) { - syslog(LOG_EMERG | mFacility, "cannot create configuration table in database at %s, error message: %s", filename, sqlite3_errmsg(mDB)); + gLogEarly(LOG_EMERG, "cannot create configuration table in database at %s, error message: %s", filename, sqlite3_errmsg(mDB)); } } @@ -175,7 +175,7 @@ string ConfigurationTable::getStr(const string& key) return lookup(key).value(); } catch (ConfigurationTableKeyNotFound) { // Raise an alert and re-throw the exception. - syslog(LOG_ALERT | mFacility, "configuration parameter %s has no defined value", key.c_str()); + gLogEarly(LOG_ALERT, "configuration parameter %s has no defined value", key.c_str()); throw ConfigurationTableKeyNotFound(key); } } @@ -186,7 +186,7 @@ string ConfigurationTable::getStr(const string& key, const char* defaultValue) ScopedLock lock(mLock); return lookup(key).value(); } catch (ConfigurationTableKeyNotFound) { - syslog(LOG_NOTICE | mFacility, "deinfing missing parameter %s with value %s", key.c_str(),defaultValue); + gLogEarly(LOG_NOTICE, "deinfing missing parameter %s with value %s", key.c_str(),defaultValue); set(key,defaultValue); return string(defaultValue); } @@ -211,7 +211,7 @@ long ConfigurationTable::getNum(const string& key) return lookup(key).number(); } catch (ConfigurationTableKeyNotFound) { // Raise an alert and re-throw the exception. - syslog(LOG_ALERT | mFacility, "configuration parameter %s has no defined value", key.c_str()); + gLogEarly(LOG_ALERT, "configuration parameter %s has no defined value", key.c_str()); throw ConfigurationTableKeyNotFound(key); } } @@ -223,7 +223,7 @@ long ConfigurationTable::getNum(const string& key, long defaultValue) ScopedLock lock(mLock); return lookup(key).number(); } catch (ConfigurationTableKeyNotFound) { - syslog(LOG_NOTICE | mFacility, "deinfing missing parameter %s with value %ld", key.c_str(),defaultValue); + gLogEarly(LOG_NOTICE, "deinfing missing parameter %s with value %ld", key.c_str(),defaultValue); set(key,defaultValue); return defaultValue; } @@ -247,7 +247,7 @@ std::vector<string> ConfigurationTable::getVectorOfStrings(const string& key) line = strdup(rec.value().c_str()); } catch (ConfigurationTableKeyNotFound) { // Raise an alert and re-throw the exception. - syslog(LOG_ALERT | mFacility, "configuration parameter %s has no defined value", key.c_str()); + gLogEarly(LOG_ALERT, "configuration parameter %s has no defined value", key.c_str()); throw ConfigurationTableKeyNotFound(key); } @@ -289,7 +289,7 @@ std::vector<unsigned> ConfigurationTable::getVector(const string& key) line = strdup(rec.value().c_str()); } catch (ConfigurationTableKeyNotFound) { // Raise an alert and re-throw the exception. - syslog(LOG_ALERT | mFacility, "configuration parameter %s has no defined value", key.c_str()); + gLogEarly(LOG_ALERT, "configuration parameter %s has no defined value", key.c_str()); throw ConfigurationTableKeyNotFound(key); } diff --git a/CommonLibs/Configuration.h b/CommonLibs/Configuration.h index 3377e6d..bc37a49 100644 --- a/CommonLibs/Configuration.h +++ b/CommonLibs/Configuration.h @@ -33,7 +33,6 @@ #include <assert.h> #include <stdlib.h> -#include <syslog.h> #include <map> #include <vector> @@ -181,12 +180,11 @@ class ConfigurationTable { sqlite3* mDB; ///< database connection ConfigurationMap mCache; ///< cache of recently access configuration values mutable Mutex mLock; ///< control for multithreaded access to the cache - int mFacility; public: - ConfigurationTable(const char* filename = ":memory:", const char *wCmdName = 0, int wFacility = LOG_USER); + ConfigurationTable(const char* filename = ":memory:", const char *wCmdName = 0); /** Return true if the key is used in the table. */ bool defines(const std::string& key); diff --git a/CommonLibs/ConfigurationTest.cpp b/CommonLibs/ConfigurationTest.cpp index bff04e6..a21ea86 100644 --- a/CommonLibs/ConfigurationTest.cpp +++ b/CommonLibs/ConfigurationTest.cpp @@ -32,7 +32,7 @@ using namespace std; -ConfigurationTable gConfig("exampleconfig.db","test",LOG_LOCAL7); +ConfigurationTable gConfig("exampleconfig.db","test"); void purgeConfig(void*,int,char const*, char const*, sqlite3_int64) { diff --git a/CommonLibs/Logger.cpp b/CommonLibs/Logger.cpp index d8bfc6e..36b7696 100644 --- a/CommonLibs/Logger.cpp +++ b/CommonLibs/Logger.cpp @@ -28,6 +28,7 @@ #include <cstdio> #include <fstream> #include <string> +#include <stdarg.h> #include "Configuration.h" #include "Logger.h" @@ -200,6 +201,13 @@ void gLogInit(const char* name, const char* level, int facility) } - +void gLogEarly(int level, const char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + vsyslog(level | LOG_USER, fmt, args); + va_end(args); +} // vim: ts=4 sw=4 diff --git a/CommonLibs/Logger.h b/CommonLibs/Logger.h index 35101d8..0a9b535 100644 --- a/CommonLibs/Logger.h +++ b/CommonLibs/Logger.h @@ -102,6 +102,8 @@ std::list<std::string> gGetLoggerAlarms(); ///< Get a copy of the recent alarm void gLogInit(const char* name, const char* level=NULL, int facility=LOG_USER); /** Get the logging level associated with a given file. */ int gGetLoggingLevel(const char *filename=NULL); +/** Allow early logging when still in constructors */ +void gLogEarly(int level, const char *fmt, ...) __attribute__((format(printf, 2, 3))); //@} |