Logger.h

00001 #ifndef _Logger_h
00002 #define _Logger_h
00003 
00004 
00005 // SYSTEM INCLUDES
00006 
00007 //#include <cassert>
00008 
00009 // PROJECT INCLUDES
00010 
00011 // LOCAL INCLUDES
00012 
00013 #include "wxTextCtrlOutputStream.h"
00014 #include "util.h"
00015 
00016 // FORWARD REFERENCES
00017 //
00018 
00019 #undef ERROR        // wxWidgets też definiuje taką stałą
00020 
00021 #define FILE_LOGGING
00022 //#define WINDOW_LOGGING
00023 
00044 class Logger
00045     : public wxTextOutputStream
00046 {
00047 // LIFECYCLE
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 // OPERATIONS
00096 
00105     void WriteString(const wxString& string);
00106 
00107 // OPERATORS
00108 // ACCESS
00109 
00114     void MessageLevel(const LevelType messageLevel);
00115 
00120     void DisplayLevel(const LevelType displayLevel);
00121 
00122 // INQUIRY
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     // Deklaracja prywatnego konstruktora kopiującego i operatora =.
00153     // Uniemożliwia skopiowanie obiektu tej klasy.
00154     DECLARE_NO_COPY_CLASS(Logger);
00155 
00156 };
00157 
00158 // INLINE METHODS
00159 //
00160 
00161 // EXTERNAL REFERENCES
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

Wygenerowano Fri Sep 29 21:04:47 2006 dla EduOptim2 programem  doxygen 1.4.6