00001 #ifndef _Logger_h
00002 #define _Logger_h
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "wxTextCtrlOutputStream.h"
00014 #include "util.h"
00015
00016
00017
00018
00019 #undef ERROR // wxWidgets też definiuje taką stałą
00020
00021 #define FILE_LOGGING
00022
00023
00044 class Logger
00045 : public wxTextOutputStream
00046 {
00047
00048
00049 public:
00050
00053 typedef enum
00054 {
00055 DEBUG,
00056 INFO,
00057 WARNING,
00058 ERROR,
00059 FATAL
00060 } LevelType;
00061
00068 Logger(wxOutputStream& targetOutputStream,
00069 const wxString& unitName = wxString(__TFILE__),
00070 const LevelType displayLevel = DEBUG);
00071
00072
00075 ~Logger();
00076
00084 static wxFFileOutputStream& CommonFfos();
00085
00093 static wxFFileOutputStream& CommonStderrOs();
00094
00095
00096
00105 void WriteString(const wxString& string);
00106
00107
00108
00109
00114 void MessageLevel(const LevelType messageLevel);
00115
00120 void DisplayLevel(const LevelType displayLevel);
00121
00122
00123
00124 protected:
00125 private:
00126
00127 static const wxString& LevelName(LevelType level);
00128
00131 wxString mUnitName;
00132
00136 LevelType mDisplayLevel;
00137
00140 LevelType mMessageLevel;
00141
00145 bool mNewLine;
00146
00150 wxString mCurrentPrefix;
00151
00152
00153
00154 DECLARE_NO_COPY_CLASS(Logger);
00155
00156 };
00157
00158
00159
00160
00161
00162
00163
00164
00165 #ifdef NODEBUG
00166
00167 #define LOGGER(level) ;
00168 #define FILE_LOGGER(level,filename) ;
00169 #define WINDOW_LOGGER(level) ;
00170 #define WINDOW_LOGGER_ACTIVATE ;
00171 #define LOG(level,message) ;
00172 #define LOGGER_ON ;
00173
00174 #else // NODEBUG not defined
00175
00176 #ifdef WINDOW_LOGGING
00177 #define LOGGER(level) \
00178 static wxTextCtrlOutputStream gOutputStream; \
00179 static Logger gLogger(gOutputStream, \
00180 wxString(__TFILE__), \
00181 Logger::level);
00182 #define LOGGER_ON \
00183 wxTextCtrlOutputStream::SetTextCtrl();
00184
00185 #else // WINDOW_LOGGING not defined
00186
00187 #ifdef FILE_LOGGING
00188 #define LOGGER(level) \
00189 static Logger gLogger(Logger::CommonFfos(), \
00190 wxString(__TFILE__), \
00191 Logger::level);
00192 #define LOGGER_ON ;
00193
00194 #else // FILE_LOGGING not defined
00195
00196 #define LOGGER(level) \
00197 static Logger gLogger(Logger::CommonStderrOs(), \
00198 wxString(__TFILE__), \
00199 Logger::level);
00200 #define LOGGER_ON ;
00201
00202 #endif // FILE_LOGGING
00203 #endif // WINDOW_LOGGING
00204
00205 #define LOG(level,message) \
00206 gLogger.MessageLevel(Logger::level); \
00207 gLogger << message << endl;
00208
00209 #endif // NODEBUG
00210
00211 #endif // _wxLogger_h