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
00041 #ifndef CCXX_SLOG_H_
00042 #define CCXX_SLOG_H_
00043
00044 #ifndef CCXX_CONFIG_H_
00045 #include <cc++/config.h>
00046 #endif
00047
00048 #ifndef CCXX_THREAD_H_
00049 #include <cc++/thread.h>
00050 #endif
00051
00052 #include <fstream>
00053 #include <iostream>
00054 #include <strstream>
00055
00056 #ifdef CCXX_NAMESPACES
00057 namespace ost {
00058 #endif
00059
00060 enum slog_class_t
00061 {
00062 SLOG_SECURITY,
00063 SLOG_AUDIT,
00064 SLOG_DAEMON,
00065 SLOG_USER,
00066 SLOG_DEFAULT,
00067 SLOG_LOCAL0,
00068 SLOG_LOCAL1,
00069 SLOG_LOCAL2,
00070 SLOG_LOCAL3,
00071 SLOG_LOCAL4,
00072 SLOG_LOCAL5,
00073 SLOG_LOCAL6,
00074 SLOG_LOCAL7
00075 };
00076 typedef enum slog_class_t slog_class_t;
00077
00078 enum slog_level_t
00079 {
00080 SLOG_EMERGENCY = 1,
00081 SLOG_ALERT,
00082 SLOG_CRITICAL,
00083 SLOG_ERROR,
00084 SLOG_WARNING,
00085 SLOG_NOTICE,
00086 SLOG_INFO,
00087 SLOG_DEBUG
00088 };
00089 typedef enum slog_level_t slog_level_t;
00090
00132 #if defined(STLPORT) || defined(__KCC)
00133 #define ostream ostream_withassign
00134 #endif
00135 class CCXX_CLASS_EXPORT Slog : public std::streambuf, public std::ostream
00136 {
00137 private:
00138 #ifndef HAVE_SYSLOG_H
00139 Mutex lock;
00140 std::ofstream syslog;
00141 #endif
00142 int priority;
00143 slog_level_t _level;
00144 bool _enable;
00145 bool _clogEnable;
00146
00147 protected:
00153 int overflow(int c);
00154
00155 public:
00163 Slog(void);
00164
00165 virtual ~Slog(void);
00166
00167 void close(void);
00168
00174 void open(const char *ident, slog_class_t grp = SLOG_USER);
00175
00182 Slog &operator()(const char *ident, slog_class_t grp = SLOG_USER,
00183 slog_level_t level = SLOG_ERROR);
00184
00190 Slog &operator()(slog_level_t level, slog_class_t = SLOG_DEFAULT);
00191
00195 Slog &operator()(void);
00196
00201 inline void level(slog_level_t enable)
00202 {_level = enable;};
00203
00209 inline void clogEnable(bool f=true)
00210 {_clogEnable = f;};
00211 };
00212
00213 extern Slog slog;
00214
00215 #ifdef CCXX_NAMESPACES
00216 };
00217 #endif
00218
00219 #endif
00220