CARMA C++
LogStream.h
Go to the documentation of this file.
1 #ifndef SZA_UTIL_LOGSTREAM_H
2 #define SZA_UTIL_LOGSTREAM_H
3 
4 #include <stdio.h>
5 #include <stdlib.h>
6 #include <string>
7 #include <iostream>
8 #include <sstream>
9 #include <string>
10 #include <cstring>
11 
19 namespace sza {
20  namespace util {
21 
22  class LogStream : public std::ostringstream {
23  public:
24 
28  LogStream();
29 
33  LogStream(std::string message, std::string fileName,
34  int lineNo, std::string functionName,
35  bool isError, bool usePrefix);
36 
40  LogStream(std::ostringstream os, std::string fileName,
41  int lineNo, std::string functionName,
42  bool isError, bool usePrefix);
43 
47  virtual ~LogStream();
48 
52  void setLogStreamMessage(std::string message,
53  std::string fileName, int lineNo,
54  std::string functionName,
55  bool isError,
56  bool usePrefix);
57 
61  void setLogStreamMessage(std::ostringstream& os,
62  std::string fileName, int lineNo,
63  std::string functionName,
64  bool isError,
65  bool usePrefix);
66 
70  void appendLogStreamMessage(std::string message,
71  std::string fileName,
72  int lineNo,
73  std::string functionName,
74  bool isError,
75  bool usePrefix);
76 
80  void appendLogStreamMessage(std::ostringstream& os,
81  std::string fileName, int lineNo,
82  std::string functionName,
83  bool isError,
84  bool usePrefix);
88  void initLogStreamMessage(std::string fileName, int lineNo,
89  std::string functionName,
90  bool isError,
91  bool usePrefix);
92 
96  void setSysLogStreamError(std::string sysFunction,
97  std::string fileName,
98  int lineNo,
99  std::string functionName,
100  bool isError,
101  bool usePrefix);
105  void appendSysLogStreamError(std::string sysFunction,
106  std::string fileName,
107  int lineNo,
108  std::string functionName,
109  bool isError,
110  bool usePrefix);
114  std::string getMessage();
115 
119  bool isError();
120 
124  void clear();
125 
129  void finish();
130 
134  void report();
135 
139  void log();
140 
141  private:
142 
143  bool isError_;
144 
145  void addPrefix(int lineNo, std::string functionName);
146 
147  }; // End class LogStream
148 
149  }; // End namespace util
150 }; // End namespace sza
151 
152 // These have to be macros, or else the FILE, LINE, etc. macros won't
153 // work. Ie, if __FILE__, etc. were simply set as default arguments
154 // to setMessage() for example, the expanded macros would refer to the
155 // context in this file, not the context where the call is made,
156 // defeating the purpose of those macros!
157 
158 #ifdef LogStr
159 #undef LogStr
160 #endif
161 
162 #define LogStr(isErr, message) LogStream((message), __FILE__, __LINE__, \
163 __PRETTY_FUNCTION__, isErr, true)
164 
165 #ifdef setMessage
166 #undef setMessage
167 #endif
168 
169 #define setMessage(isErr, message) setLogStreamMessage((message), \
170 __FILE__, __LINE__, __PRETTY_FUNCTION__, isErr, true)
171 
172 #ifdef appendMessage
173 #undef appendMessage
174 #endif
175 
176 #define appendMessage(isErr, message) appendLogStreamMessage((message), \
177 __FILE__, __LINE__, __PRETTY_FUNCTION__, isErr, true)
178 
179 #ifdef initMessage
180 #undef initMessage
181 #endif
182 
183 #define initMessage(isErr) initLogStreamMessage(__FILE__, __LINE__, \
184 __PRETTY_FUNCTION__, isErr, true)
185 
186 #ifdef setSysError
187 #undef setSysError
188 #endif
189 
190 #define setSysError(isErr, sysFunction) setSysLogStreamError((sysFunction), \
191 __FILE__, __LINE__, __PRETTY_FUNCTION__, isErr, true)
192 
193 #ifdef appendSysError
194 #undef appendSysError
195 #endif
196 
197 #define appendSysError(isErr, sysFunction) \
198 appendSysLogStreamError((sysFunction), __FILE__, __LINE__, \
199 __PRETTY_FUNCTION__, isErr, true)
200 
201 #ifdef LogStrSimple
202 #undef LogStrSimple
203 #endif
204 
205 #define LogStrSimple(isErr, message) LogStream((message), __FILE__, __LINE__, \
206 __PRETTY_FUNCTION__, isErr, false)
207 
208 #ifdef setMessageSimple
209 #undef setMessageSimple
210 #endif
211 
212 #define setMessageSimple(isErr, message) setLogStreamMessage((message), \
213 __FILE__, __LINE__, __PRETTY_FUNCTION__, isErr, false)
214 
215 #ifdef appendMessageSimple
216 #undef appendMessageSimple
217 #endif
218 
219 #define appendMessageSimple(isErr, message) appendLogStreamMessage((message), \
220 __FILE__, __LINE__, __PRETTY_FUNCTION__, isErr, false)
221 
222 #ifdef initMessageSimple
223 #undef initMessageSimple
224 #endif
225 
226 #define initMessageSimple(isErr) initLogStreamMessage(__FILE__, __LINE__, \
227 __PRETTY_FUNCTION__, isErr, false)
228 
229 #ifdef setSysErrorSimple
230 #undef setSysErrorSimple
231 #endif
232 
233 #define setSysErrorSimple(isErr, sysFunction) setSysLogStreamError((sysFunction), \
234 __FILE__, __LINE__, __PRETTY_FUNCTION__, isErr, false)
235 
236 #ifdef appendSysErrorSimple
237 #undef appendSysErrorSimple
238 #endif
239 
240 #define appendSysErrorSimple(isErr, sysFunction) \
241 appendSysLogStreamError((sysFunction), __FILE__, __LINE__, \
242 __PRETTY_FUNCTION__, isErr, false)
243 
244 #endif // End #ifndef