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