/[projects]/smsdaemon/Logger.cpp
ViewVC logotype

Diff of /smsdaemon/Logger.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 159 by torben, Mon Dec 8 22:05:16 2008 UTC revision 694 by torben, Thu Apr 29 18:04:10 2010 UTC
# Line 1  Line 1 
1  #include "Logger.h"  #include "Logger.h"
2    
3  #include "Common.h"  #include "Common.h"
4    #include "ConfigFile.h"
5  #include <iostream>  #include <iostream>
6  #include <sstream>  #include <sstream>
7  #include <fstream>  #include <fstream>
8  #include <iomanip>  #include <iomanip>
9    
10    #include <stdlib.h>
11    #include <syslog.h>
12    
13  using namespace std;  using namespace std;
14    
15  const char* Months[] = {  "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov","Dec"};  const char* Months[] = {  "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov","Dec"};
# Line 13  const char* Months[] = {  "Jan", "Feb", Line 17  const char* Months[] = {  "Jan", "Feb",
17  namespace Logger  namespace Logger
18  {  {
19          string _logFile;          string _logFile;
20    
21            std::vector<std::string> logBuffer;
22    
23            enum LogDest
24            {
25                    LogFile,
26                    LogSyslog,
27                    LogStdout
28            };
29    
30            LogDest logger;
31    
32            void initLog()
33            {
34                    Common* cmn = Common::instance();
35                    string logmethod = cmn->GetConfigfile()->GetValue("smsdaemon","log","");
36                    if (logmethod == "syslog")
37                    {
38                            logger = LogSyslog;
39    
40                            openlog("smsdaemon", 0 , LOG_DAEMON);
41                    }
42                    else if (logmethod == "logfile")
43                    {
44                            logger = LogFile;
45                    }
46                    else
47                    {
48                            cerr << "Invalid config file setting for 'log' : " << logmethod << endl;
49                            exit(1);
50                    }
51    
52                    if (cmn->isDebug)
53                    {
54                            logger = LogStdout;
55                    }
56            }
57    
58          void setLogfile(std::string file)          void setLogfile(std::string file)
59          {          {
60                  _logFile = file;                  _logFile = file;
# Line 26  namespace Logger Line 68  namespace Logger
68                  localtime_r(&t, &now);                  localtime_r(&t, &now);
69    
70                  ostringstream out;                  ostringstream out;
71    
72                  out << Months[ now.tm_mon ] << " " << setw(2) << setfill('0') << now.tm_mday;                  out << Months[ now.tm_mon ] << " " << setw(2) << setfill('0') << now.tm_mday;
73                  out << " " << setw(2) << setfill('0') << now.tm_hour;                  out << " " << setw(2) << setfill('0') << now.tm_hour;
74                  out << ":" << setw(2) << setfill('0') << now.tm_min;                  out << ":" << setw(2) << setfill('0') << now.tm_min;
75                  out << ":" << setw(2) << setfill('0') << now.tm_sec;                  out << ":" << setw(2) << setfill('0') << now.tm_sec;
76                  out << "  " << msg << endl;                  out << "  " << msg << endl;
77    
78                  if (cmn->isDaemon && _logFile != "" && cmn->daemonized)                  logBuffer.push_back( out.str() );
79    
80                    if (logger == LogFile || logger == LogStdout)
81                  {                  {
82                          seteuid(0);                          if (cmn->isDaemon && _logFile != "" && cmn->daemonized)
                         ofstream of( _logFile.c_str(), ios_base::out | ios_base::app | ios_base::ate);//append mode  
                         if (of)  
83                          {                          {
84                                  of << out.str();                                  seteuid(0);
85                                  of.flush();                                  ofstream of( _logFile.c_str(), ios_base::out | ios_base::app | ios_base::ate);//append mode
86                                  of.close();                                  if (of)
87                                    {
88                                            of << out.str();
89                                            of.flush();
90                                            of.close();
91                                    }
92                                    seteuid( cmn->uid);
93                            }
94                            else
95                            {
96                                    cout << out.str();
97                                    cout.flush();
98                          }                          }
                         seteuid( cmn->uid);  
99                  }                  }
100                  else                  else  // logSyslog
101                  {                  {
102                          cout << out.str();                          syslog(LOG_INFO, "%s", msg.c_str());
                         cout.flush();  
103                  }                  }
104          }          }
105  }  }

Legend:
Removed from v.159  
changed lines
  Added in v.694

  ViewVC Help
Powered by ViewVC 1.1.20