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
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 @@
 }
 
 
-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 @@
 		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 @@
 		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 @@
 		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 @@
 		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 @@
 		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 @@
 		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 @@
 		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 @@
 	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 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 @@
 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)));
 //@}