--- smsdaemon/Logger.cpp 2008/12/08 22:05:16 159 +++ smsdaemon/Logger.cpp 2008/12/10 22:02:28 175 @@ -1,11 +1,15 @@ #include "Logger.h" #include "Common.h" +#include "ConfigFile.h" #include #include #include #include +#include +#include + using namespace std; const char* Months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov","Dec"}; @@ -13,6 +17,42 @@ namespace Logger { string _logFile; + + enum LogDest + { + LogFile, + LogSyslog, + LogStdout + }; + + LogDest logger; + + void initLog() + { + Common* cmn = Common::instance(); + string logmethod = cmn->GetConfigfile()->GetValue("smsdaemon","log"); + if (logmethod == "syslog") + { + logger = LogSyslog; + + openlog("smsdaemon", 0 , LOG_DAEMON); + } + else if (logmethod == "logfile") + { + logger = LogFile; + } + else + { + cerr << "Invalid config file setting for 'log' : " << logmethod << endl; + exit(1); + } + + if (cmn->isDebug) + { + logger = LogStdout; + } + } + void setLogfile(std::string file) { _logFile = file; @@ -26,28 +66,35 @@ localtime_r(&t, &now); ostringstream out; - out << Months[ now.tm_mon ] << " " << setw(2) << setfill('0') << now.tm_mday; - out << " " << setw(2) << setfill('0') << now.tm_hour; - out << ":" << setw(2) << setfill('0') << now.tm_min; - out << ":" << setw(2) << setfill('0') << now.tm_sec; - out << " " << msg << endl; - - if (cmn->isDaemon && _logFile != "" && cmn->daemonized) - { - seteuid(0); - ofstream of( _logFile.c_str(), ios_base::out | ios_base::app | ios_base::ate);//append mode - if (of) + if (logger == LogFile || logger == LogStdout) + { + out << Months[ now.tm_mon ] << " " << setw(2) << setfill('0') << now.tm_mday; + out << " " << setw(2) << setfill('0') << now.tm_hour; + out << ":" << setw(2) << setfill('0') << now.tm_min; + out << ":" << setw(2) << setfill('0') << now.tm_sec; + out << " " << msg << endl; + + if (cmn->isDaemon && _logFile != "" && cmn->daemonized) { - of << out.str(); - of.flush(); - of.close(); + seteuid(0); + ofstream of( _logFile.c_str(), ios_base::out | ios_base::app | ios_base::ate);//append mode + if (of) + { + of << out.str(); + of.flush(); + of.close(); + } + seteuid( cmn->uid); } - seteuid( cmn->uid); - } - else + else + { + cout << out.str(); + cout.flush(); + } + } + else // logSyslog { - cout << out.str(); - cout.flush(); + syslog(LOG_INFO, "%s", msg.c_str()); } } }