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

Contents of /smsdaemon/Logger.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1011 - (show annotations) (download)
Thu Aug 5 06:53:38 2010 UTC (13 years, 9 months ago) by torben
File size: 2127 byte(s)
change log date format to yyyy-mm-dd
1 #include "Logger.h"
2
3 #include "Common.h"
4 #include "ConfigFile.h"
5 #include <iostream>
6 #include <sstream>
7 #include <fstream>
8 #include <iomanip>
9
10 #include <stdlib.h>
11 #include <syslog.h>
12
13 using namespace std;
14
15 const char* Months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov","Dec"};
16
17 namespace Logger
18 {
19 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)
59 {
60 _logFile = file;
61 }
62
63 void logMessage(string msg)
64 {
65 Common* cmn = Common::instance();
66 time_t t = time(0);
67 tm now;
68 localtime_r(&t, &now);
69
70 ostringstream out;
71
72
73 out << (1900+now.tm_year) << "-" << setw(2) << setfill('0') << (now.tm_mon+1) << "-" << setw(2) << setfill('0') << now.tm_mday;
74 out << " " << setw(2) << setfill('0') << now.tm_hour;
75 out << ":" << setw(2) << setfill('0') << now.tm_min;
76 out << ":" << setw(2) << setfill('0') << now.tm_sec;
77 out << " " << msg << endl;
78
79 logBuffer.push_back( out.str() );
80
81 if (logger == LogFile || logger == LogStdout)
82 {
83 if (cmn->isDaemon && _logFile != "" && cmn->daemonized)
84 {
85 seteuid(0);
86 ofstream of( _logFile.c_str(), ios_base::out | ios_base::app | ios_base::ate);//append mode
87 if (of)
88 {
89 of << out.str();
90 of.flush();
91 of.close();
92 }
93 seteuid( cmn->uid);
94 }
95 else
96 {
97 cout << out.str();
98 cout.flush();
99 }
100 }
101 else // logSyslog
102 {
103 syslog(LOG_INFO, "%s", msg.c_str());
104 }
105 }
106
107 std::string getLog()
108 {
109 std::ostringstream oss;
110 for (unsigned i=0; i<logBuffer.size(); i++) {
111 oss << logBuffer[i];
112 }
113
114 return oss.str();
115 }
116 }

  ViewVC Help
Powered by ViewVC 1.1.20