Log.h

00001 /* 
00002    EyeDB Object Database Management System
00003    Copyright (C) 1994-2008 SYSRA
00004    
00005    EyeDB is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Lesser General Public
00007    License as published by the Free Software Foundation; either
00008    version 2.1 of the License, or (at your option) any later version.
00009    
00010    EyeDB is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Lesser General Public License for more details.
00014    
00015    You should have received a copy of the GNU Lesser General Public
00016    License along with this library; if not, write to the Free Software
00017    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA 
00018 */
00019 
00020 /*
00021    Author: Eric Viara <viara@sysra.com>
00022 */
00023 
00024 
00025 #ifndef _EYEDB_LOG_H
00026 #define _EYEDB_LOG_H
00027 
00028 namespace eyedb {
00029 
00035 #define IDB_LOG_MASK(X) ((unsigned long long)(1ULL << (X)))
00036 
00037 #define IDB_LOG_LOCAL  IDB_LOG_MASK(0)
00038 #define IDB_LOG_SERVER IDB_LOG_MASK(1)
00039 
00040   /* general level */
00041 #define IDB_LOG_CONN        IDB_LOG_MASK(2)
00042 #define IDB_LOG_TRANSACTION IDB_LOG_MASK(3)
00043 #define IDB_LOG_DATABASE    IDB_LOG_MASK(4)
00044 #define IDB_LOG_ADMIN       IDB_LOG_MASK(5)
00045 #define IDB_LOG_EXCEPTION   IDB_LOG_MASK(40)
00046 
00047   /* storage manager level */
00048 #define IDB_LOG_OID_CREATE IDB_LOG_MASK(6)
00049 #define IDB_LOG_OID_READ   IDB_LOG_MASK(7)
00050 #define IDB_LOG_OID_WRITE  IDB_LOG_MASK(8)
00051 #define IDB_LOG_OID_DELETE IDB_LOG_MASK(9)
00052 #define IDB_LOG_OID_ALL    (IDB_LOG_OID_CREATE | IDB_LOG_OID_READ | \
00053                             IDB_LOG_OID_WRITE | IDB_LOG_OID_DELETE)
00054 
00055 #define IDB_LOG_MMAP        IDB_LOG_MASK(10)
00056 #define IDB_LOG_MMAP_DETAIL IDB_LOG_MASK(47)
00057 #define IDB_LOG_MTX         IDB_LOG_MASK(41)
00058 
00059   /* storage manager index level */
00060 #define IDB_LOG_IDX_CREATE   IDB_LOG_MASK(11)
00061 #define IDB_LOG_IDX_REMOVE   IDB_LOG_MASK(12)
00062 #define IDB_LOG_IDX_INSERT   IDB_LOG_MASK(14)
00063 #define IDB_LOG_IDX_SUPPRESS IDB_LOG_MASK(15)
00064 #define IDB_LOG_IDX_SEARCH   IDB_LOG_MASK(16)
00065 #define IDB_LOG_IDX_SEARCH_DETAIL IDB_LOG_MASK(13)
00066 #define IDB_LOG_IDX_ALL    (IDB_LOG_IDX_CREATE | IDB_LOG_IDX_REMOVE | \
00067                             IDB_LOG_IDX_INSERT | IDB_LOG_IDX_SEARCH_DETAIL | \
00068                             IDB_LOG_IDX_SUPPRESS | IDB_LOG_IDX_SEARCH)
00069      
00070   /* object level */
00071 #define IDB_LOG_OBJ_LOAD   IDB_LOG_MASK(17)
00072 #define IDB_LOG_OBJ_CREATE IDB_LOG_MASK(18)
00073 #define IDB_LOG_OBJ_UPDATE IDB_LOG_MASK(19)
00074 #define IDB_LOG_OBJ_REMOVE IDB_LOG_MASK(20)
00075 #define IDB_LOG_OBJ_ALL    (IDB_LOG_OBJ_LOAD | IDB_LOG_OBJ_CREATE | \
00076                             IDB_LOG_OBJ_UPDATE | IDB_LOG_OBJ_REMOVE)
00077 
00078 #define IDB_LOG_OBJ_GBX     IDB_LOG_MASK(42)
00079 #define IDB_LOG_OBJ_INIT    IDB_LOG_MASK(43)
00080 #define IDB_LOG_OBJ_GARBAGE IDB_LOG_MASK(44)
00081 #define IDB_LOG_OBJ_COPY    IDB_LOG_MASK(45)
00082 
00083 #define IDB_LOG_OBJ_ALLOC (IDB_LOG_OBJ_GBX | IDB_LOG_OBJ_INIT | \
00084                            IDB_LOG_OBJ_GARBAGE | IDB_LOG_OBJ_COPY)
00085 
00086 #define IDB_LOG_DEV         IDB_LOG_MASK(46)
00087 
00088   /* method */
00089 #define IDB_LOG_EXECUTE IDB_LOG_MASK(21)
00090 
00091   /* object data level */
00092 #define IDB_LOG_DATA_READ   IDB_LOG_MASK(22)
00093 #define IDB_LOG_DATA_CREATE IDB_LOG_MASK(23)
00094 #define IDB_LOG_DATA_WRITE  IDB_LOG_MASK(24)
00095 #define IDB_LOG_DATA_DELETE IDB_LOG_MASK(25)
00096 #define IDB_LOG_DATA_ALL    (IDB_LOG_DATA_CREATE | IDB_LOG_DATA_READ | \
00097                              IDB_LOG_DATA_WRITE | IDB_LOG_DATA_DELETE)
00098 
00099   /* queries */
00100 #define IDB_LOG_OQL_EXEC    IDB_LOG_MASK(26)
00101 #define IDB_LOG_OQL_RESULT  IDB_LOG_MASK(30)
00102 
00103   /* relationship level */
00104 #define IDB_LOG_RELSHIP         IDB_LOG_MASK(27)
00105 #define IDB_LOG_RELSHIP_DETAILS IDB_LOG_MASK(28)
00106 
00107 #define IDB_LOG_SCHEMA_EVOLVE IDB_LOG_MASK(29)
00108 
00109 #define IDB_LOG_USER_BOTTOM  50
00110 #define IDB_LOG_USER_MAX     12
00111 
00112   /* user level */
00113 #define IDB_LOG_USER(X)  \
00114   (((X) >= 0 && (X) < IDB_LOG_USER_MAX) ? \
00115       IDB_LOG_MASK((X+IDB_LOG_USER_BOTTOM)) : \
00116        (unsigned long long)(fprintf(stderr, "out of range user log #%d\n", (X)), 0))
00117 
00118   /* default log mask */
00119 #define IDB_LOG_DEFAULT (IDB_LOG_LOCAL | IDB_LOG_SERVER | IDB_LOG_CONN | \
00120                          IDB_LOG_TRANSACTION | IDB_LOG_DATABASE | \
00121                          IDB_LOG_ADMIN | IDB_LOG_EXCEPTION | IDB_LOG_MTX)
00122 
00123   /* no log */
00124 #define IDB_LOG_NOLOG IDB_LOG_MASK(63)
00125 
00126   typedef unsigned long long LogMask;
00127 
00128 #if defined(__cplusplus) && !defined(_eyedb_se_P_)
00129 
00133   class Log {
00134 
00135   public:
00141     static Status setLogMask(LogMask mask);
00142 
00148     static Status setLogMask(const char *str);
00149 
00154     static LogMask getLogMask();
00155 
00162     static Status logMaskToString(LogMask mask, std::string &str);
00163 
00170     static Status logStringToMask(const std::string &str, LogMask &mask);
00171 
00176     static std::string getUsage();
00177 
00182     static const char *getLog();
00183 
00189     static void setLog(const char *log);
00190 
00196     static void setLogTimer(Bool);
00197 
00202     static Bool getLogTimer();
00203 
00207     static void resetLogTimer();
00208 
00213     static void setLogDate(Bool on);
00214 
00219     static Bool getLogDate();
00220 
00225     static void setLogPid(Bool on);
00226 
00231     static Bool getLogPid();
00232 
00237     static void setLogProgName(Bool on);
00238 
00243     static Bool getLogProgName();
00244 
00245     // restricted access
00246     static Status init(const char *progname, const char *logname);
00247   };
00248 #endif
00249 
00250 
00251 #define IDB_LOG(L, S) \
00252   do {if (((L) & eyedblib::log_mask) == (L)) {utlog_p(#L); utlog S;}} while(0)
00253 
00254 #define IDB_LOG_D(L, S) \
00255   do {if ((((L)|IDB_LOG_DEV) & eyedblib::log_mask) == ((L)|IDB_LOG_DEV)) {utlog_p(#L); utlog S;}} while(0)
00256 
00257 #define IDB_LOG_X(L, S) \
00258   do {if (((L) & eyedblib::log_mask) == (L)) utlog S;} while(0)
00259 
00260 #define IDB_LOG_DX(L, S) \
00261   do {if ((((L)|IDB_LOG_DEV) & eyedblib::log_mask) == ((L)|IDB_LOG_DEV)) utlog S;} while(0)
00262 
00263 #define IDB_LOG_F(S) \
00264   do { \
00265     FILE *logfd; \
00266  \
00267     utlog_p("FATAL_ERROR"); \
00268     utlog S;\
00269  \
00270     logfd = utlogFDSet(stderr); \
00271     utlog_p("FATAL_ERROR"); \
00272     utlog S; \
00273     (void)utlogFDSet(logfd);\
00274    } while (0)
00275 
00276 #define IDB_LOG_FX(S) \
00277   do { \
00278     utlog_p("FATAL_ERROR"); \
00279     utlog S;\
00280    } while (0)
00281 
00286 }
00287 
00288 namespace eyedblib {
00289   extern LogMask log_mask;
00290 }
00291 
00292 #endif

Generated on Mon Dec 22 18:15:58 2008 for eyedb by  doxygen 1.5.3