00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00046 #ifndef CCXX_SLOG_H_
00047 #define CCXX_SLOG_H_
00048
00049 #ifndef CCXX_MISSING_H_
00050 #include <cc++/missing.h>
00051 #endif
00052
00053 #ifndef CCXX_THREAD_H_
00054 #include <cc++/thread.h>
00055 #endif
00056
00057 #ifdef CCXX_NAMESPACES
00058 namespace ost {
00059 #endif
00060
00102 class __EXPORT Slog : protected std::streambuf, public std::ostream
00103 {
00104 public:
00105 typedef enum Class
00106 {
00107 classSecurity,
00108 classAudit,
00109 classDaemon,
00110 classUser,
00111 classDefault,
00112 classLocal0,
00113 classLocal1,
00114 classLocal2,
00115 classLocal3,
00116 classLocal4,
00117 classLocal5,
00118 classLocal6,
00119 classLocal7
00120 } Class;
00121
00122 typedef enum Level
00123 {
00124 levelEmergency = 1,
00125 levelAlert,
00126 levelCritical,
00127 levelError,
00128 levelWarning,
00129 levelNotice,
00130 levelInfo,
00131 levelDebug
00132 } Level;
00133
00134 private:
00135 #ifndef HAVE_SYSLOG_H
00136 Mutex lock;
00137 std::ofstream syslog;
00138 #endif
00139 int priority;
00140 Level _level;
00141 bool _enable;
00142 bool _clogEnable;
00143
00144 protected:
00150 int overflow(int c);
00151
00152 public:
00160 Slog(void);
00161
00162 virtual ~Slog(void);
00163
00164 void close(void);
00165
00171 void open(const char *ident, Class grp = classUser);
00172
00179 Slog &operator()(const char *ident, Class grp = classUser,
00180 Level level = levelError);
00181
00187 Slog &operator()(Level level, Class grp = classDefault);
00188
00192 Slog &operator()(void);
00193
00194 #ifdef HAVE_SNPRINTF
00195
00200 void error(const char *format, ...);
00201
00207 void warn(const char *format, ...);
00208
00214 void debug(const char *format, ...);
00215
00221 void emerg(const char *format, ...);
00222
00228 void alert(const char *format, ...);
00229
00235 void critical(const char *format, ...);
00236
00242 void notice(const char *format, ...);
00243
00249 void info(const char *format, ...);
00250 #endif
00251
00256 inline void level(Level enable)
00257 {_level = enable;};
00258
00264 inline void clogEnable(bool f=true)
00265 {_clogEnable = f;};
00266
00267 inline Slog &warn(void)
00268 {return operator()(Slog::levelWarning);};
00269
00270 inline Slog &error(void)
00271 {return operator()(Slog::levelError);};
00272
00273 inline Slog &debug(void)
00274 {return operator()(Slog::levelDebug);};
00275
00276 inline Slog &emerg(void)
00277 {return operator()(Slog::levelEmergency);};
00278
00279 inline Slog &alert(void)
00280 {return operator()(Slog::levelAlert);};
00281
00282 inline Slog &critical(void)
00283 {return operator()(Slog::levelCritical);};
00284
00285 inline Slog ¬ice(void)
00286 {return operator()(Slog::levelNotice);};
00287
00288 inline Slog &info(void)
00289 {return operator()(Slog::levelInfo);};
00290
00291 };
00292
00293
00294
00295
00296 extern __EXPORT Slog slog;
00297
00298
00299 #ifdef CCXX_NAMESPACES
00300 };
00301 #endif
00302
00303 #endif
00304