version 0.1.3
[fms.git] / src / logfile.cpp
1 #include "../include/logfile.h"\r
2 \r
3 #include <ctime>\r
4 #include <cstdarg>\r
5 \r
6 #ifdef XMEM\r
7         #include <xmem.h>\r
8 #endif\r
9 \r
10 LogFile::LogFile()\r
11 {\r
12         m_fileptr=NULL;\r
13         m_loglevel=LOGLEVEL_DEBUG;\r
14         m_writedate=false;\r
15         m_writeloglevel=false;\r
16         m_writenewline=true;\r
17         m_datebuffer=new char[100];\r
18 }\r
19 \r
20 LogFile::LogFile(const std::string &filename)\r
21 {\r
22         m_fileptr=NULL; \r
23         m_loglevel=LOGLEVEL_DEBUG;\r
24         m_writedate=false;\r
25         m_writeloglevel=false;\r
26         m_filename=filename;\r
27         m_writenewline=true;\r
28         m_datebuffer=new char[100];\r
29 }\r
30 \r
31 LogFile::~LogFile()\r
32 {\r
33         CloseFile();\r
34         delete [] m_datebuffer;\r
35 }\r
36 \r
37 bool LogFile::CloseFile()\r
38 {\r
39         //ZThread::Guard<ZThread::Mutex> g(m_logmutex);\r
40         PThread::Guard g(m_logmutex);\r
41 \r
42         if(m_fileptr)\r
43         {\r
44                 fclose(m_fileptr);\r
45                 m_fileptr=NULL;\r
46         }\r
47 \r
48         return true;\r
49 }\r
50 \r
51 bool LogFile::OpenFile()\r
52 {\r
53         CloseFile();\r
54 \r
55         //ZThread::Guard<ZThread::Mutex> g(m_logmutex);\r
56         PThread::Guard g(m_logmutex);\r
57 \r
58         m_fileptr=fopen(m_filename.c_str(),"a+b");\r
59 \r
60         if(m_fileptr)\r
61         {\r
62                 return true;\r
63         }\r
64         else\r
65         {\r
66                 return false;   \r
67         }\r
68 }\r
69 \r
70 void LogFile::WriteDate()\r
71 {\r
72         if(m_fileptr)\r
73         {\r
74                 time_t rawtime=time(NULL);\r
75                 struct tm *timeinfo=gmtime(&rawtime);\r
76                 \r
77                 strftime(m_datebuffer,99,"%Y-%m-%d %H:%M:%S : ",timeinfo);\r
78                 m_datebuffer[99]=NULL;\r
79                 \r
80                 fputs(m_datebuffer,m_fileptr);\r
81         }\r
82 }\r
83 \r
84 void LogFile::WriteLog(const char *format, ...)\r
85 {\r
86         va_list va;\r
87         va_start(va,format);\r
88         \r
89         if(!m_fileptr)\r
90         {\r
91                 OpenFile();\r
92         }\r
93         \r
94         if(m_fileptr)\r
95         {\r
96                 //ZThread::Guard<ZThread::Mutex> g(m_logmutex);\r
97                 PThread::Guard g(m_logmutex);\r
98                 if(m_writedate)\r
99                 {\r
100                         WriteDate();\r
101                 }\r
102                 vfprintf(m_fileptr,format,va);\r
103                 if(m_writenewline==true)\r
104                 {\r
105                         fputs("\r\n",m_fileptr);\r
106                 }\r
107                 fflush(m_fileptr);\r
108         }\r
109         \r
110         va_end(va);\r
111 \r
112 }\r
113 \r
114 void LogFile::WriteLog(const std::string &text)\r
115 {\r
116         if(!m_fileptr)\r
117         {\r
118                 OpenFile();     \r
119         }\r
120         \r
121         if(m_fileptr)\r
122         {\r
123                 //ZThread::Guard<ZThread::Mutex> g(m_logmutex);\r
124                 PThread::Guard g(m_logmutex);\r
125                 if(m_writedate)\r
126                 {\r
127                         WriteDate();    \r
128                 }\r
129                 fputs(text.c_str(),m_fileptr);\r
130                 if(m_writenewline==true)\r
131                 {\r
132                         fputs("\r\n",m_fileptr);\r
133                 }\r
134                 fflush(m_fileptr);\r
135         }\r
136 }\r
137 \r
138 void LogFile::WriteLog(const LogLevel level, const char *format, ...)\r
139 {\r
140         if(level<=m_loglevel)\r
141         {\r
142                 \r
143                 va_list va;\r
144                 va_start(va,format);\r
145                 \r
146                 if(!m_fileptr)\r
147                 {\r
148                         OpenFile();     \r
149                 }\r
150                 \r
151                 if(m_fileptr)\r
152                 {\r
153                         //ZThread::Guard<ZThread::Mutex> g(m_logmutex);\r
154                         PThread::Guard g(m_logmutex);\r
155                         if(m_writedate)\r
156                         {\r
157                                 WriteDate();    \r
158                         }\r
159                         if(m_writeloglevel)\r
160                         {\r
161                                 WriteLogLevel(level);   \r
162                         }\r
163                         vfprintf(m_fileptr,format,va);\r
164                         if(m_writenewline==true)\r
165                         {\r
166                                 fputs("\r\n",m_fileptr);\r
167                         }\r
168                         fflush(m_fileptr);\r
169                 }\r
170                 \r
171                 va_end(va);\r
172         }\r
173 }\r
174 \r
175 void LogFile::WriteLog(const LogLevel level, const std::string &text)\r
176 {\r
177         if(level<=m_loglevel)\r
178         {\r
179                 if(!m_fileptr)\r
180                 {\r
181                         OpenFile();     \r
182                 }\r
183                 \r
184                 if(m_fileptr)\r
185                 {\r
186                         //ZThread::Guard<ZThread::Mutex> g(m_logmutex);\r
187                         PThread::Guard g(m_logmutex);\r
188                         if(m_writedate)\r
189                         {\r
190                                 WriteDate();    \r
191                         }\r
192                         if(m_writeloglevel)\r
193                         {\r
194                                 WriteLogLevel(level);\r
195                         }\r
196                         fputs(text.c_str(),m_fileptr);\r
197                         if(m_writenewline==true)\r
198                         {\r
199                                 fputs("\r\n",m_fileptr);\r
200                         }\r
201                         fflush(m_fileptr);\r
202                 }\r
203         }       \r
204 }\r
205 \r
206 void LogFile::WriteLogLevel(LogLevel level)\r
207 {\r
208         if(m_fileptr)\r
209         {\r
210                 switch(level)\r
211                 {\r
212                 case LOGLEVEL_FATAL:\r
213                         fputs("FATAL : ",m_fileptr);\r
214                         break;  \r
215                 case LOGLEVEL_ERROR:\r
216                         fputs("ERROR : ",m_fileptr);\r
217                         break;\r
218                 case LOGLEVEL_WARNING:\r
219                         fputs("WARN  : ",m_fileptr);\r
220                         break;\r
221                 case LOGLEVEL_INFO:\r
222                         fputs("INFO  : ",m_fileptr);\r
223                         break;\r
224                 case LOGLEVEL_DEBUG:\r
225                         fputs("DEBUG : ",m_fileptr);\r
226                         break;\r
227                 default:\r
228                         fputs("????  : ",m_fileptr);\r
229                         break;\r
230                 }\r
231         }\r
232 }\r
233 \r
234 void LogFile::WriteNewLine()\r
235 {\r
236         //ZThread::Guard<ZThread::Mutex> g(m_logmutex);\r
237         PThread::Guard g(m_logmutex);\r
238 \r
239         if(m_fileptr)\r
240         {\r
241                 fputs("\r\n",m_fileptr);\r
242                 fflush(m_fileptr);\r
243         }\r
244 }\r
245 \r