#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"}; namespace Logger { string _logFile; std::vector logBuffer; 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; } void logMessage(string msg) { Common* cmn = Common::instance(); time_t t = time(0); tm now; 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; logBuffer.push_back( out.str() ); if (logger == LogFile || logger == LogStdout) { 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) { of << out.str(); of.flush(); of.close(); } seteuid( cmn->uid); } else { cout << out.str(); cout.flush(); } } else // logSyslog { syslog(LOG_INFO, "%s", msg.c_str()); } } }