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 _EYEDBLIB_LOG_H
00026 #define _EYEDBLIB_LOG_H
00027 
00028 #include <stdio.h>
00029 
00030 #define IDB_LOG_MASK(X) ((unsigned long long)(1ULL << (X)))
00031 
00032 #define IDB_LOG_LOCAL  IDB_LOG_MASK(0)
00033 #define IDB_LOG_SERVER IDB_LOG_MASK(1)
00034 
00035 /* general level */
00036 #define IDB_LOG_CONN        IDB_LOG_MASK(2)
00037 #define IDB_LOG_TRANSACTION IDB_LOG_MASK(3)
00038 #define IDB_LOG_DATABASE    IDB_LOG_MASK(4)
00039 #define IDB_LOG_ADMIN       IDB_LOG_MASK(5)
00040 #define IDB_LOG_EXCEPTION   IDB_LOG_MASK(40)
00041 
00042 /* storage manager level */
00043 #define IDB_LOG_OID_CREATE IDB_LOG_MASK(6)
00044 #define IDB_LOG_OID_READ   IDB_LOG_MASK(7)
00045 #define IDB_LOG_OID_WRITE  IDB_LOG_MASK(8)
00046 #define IDB_LOG_OID_DELETE IDB_LOG_MASK(9)
00047 #define IDB_LOG_OID_ALL    (IDB_LOG_OID_CREATE | IDB_LOG_OID_READ | \
00048                             IDB_LOG_OID_WRITE | IDB_LOG_OID_DELETE)
00049 
00050 #define IDB_LOG_MMAP        IDB_LOG_MASK(10)
00051 #define IDB_LOG_MMAP_DETAIL IDB_LOG_MASK(47)
00052 #define IDB_LOG_MTX         IDB_LOG_MASK(41)
00053 
00054 /* storage manager index level */
00055 #define IDB_LOG_IDX_CREATE   IDB_LOG_MASK(11)
00056 #define IDB_LOG_IDX_REMOVE   IDB_LOG_MASK(12)
00057 #define IDB_LOG_IDX_INSERT   IDB_LOG_MASK(14)
00058 #define IDB_LOG_IDX_SUPPRESS IDB_LOG_MASK(15)
00059 #define IDB_LOG_IDX_SEARCH   IDB_LOG_MASK(16)
00060 #define IDB_LOG_IDX_SEARCH_DETAIL IDB_LOG_MASK(13)
00061 #define IDB_LOG_IDX_ALL    (IDB_LOG_IDX_CREATE | IDB_LOG_IDX_REMOVE | \
00062                             IDB_LOG_IDX_INSERT | IDB_LOG_IDX_SEARCH_DETAIL | \
00063                             IDB_LOG_IDX_SUPPRESS | IDB_LOG_IDX_SEARCH)
00064      
00065 /* object level */
00066 #define IDB_LOG_OBJ_LOAD   IDB_LOG_MASK(17)
00067 #define IDB_LOG_OBJ_CREATE IDB_LOG_MASK(18)
00068 #define IDB_LOG_OBJ_UPDATE IDB_LOG_MASK(19)
00069 #define IDB_LOG_OBJ_REMOVE IDB_LOG_MASK(20)
00070 #define IDB_LOG_OBJ_ALL    (IDB_LOG_OBJ_LOAD | IDB_LOG_OBJ_CREATE | \
00071                             IDB_LOG_OBJ_UPDATE | IDB_LOG_OBJ_REMOVE)
00072 
00073 #define IDB_LOG_OBJ_GBX     IDB_LOG_MASK(42)
00074 #define IDB_LOG_OBJ_INIT    IDB_LOG_MASK(43)
00075 #define IDB_LOG_OBJ_GARBAGE IDB_LOG_MASK(44)
00076 #define IDB_LOG_OBJ_COPY    IDB_LOG_MASK(45)
00077 
00078 #define IDB_LOG_OBJ_ALLOC (IDB_LOG_OBJ_GBX | IDB_LOG_OBJ_INIT | \
00079                            IDB_LOG_OBJ_GARBAGE | IDB_LOG_OBJ_COPY)
00080 
00081 #define IDB_LOG_DEV         IDB_LOG_MASK(46)
00082 
00083 /* method */
00084 #define IDB_LOG_EXECUTE IDB_LOG_MASK(21)
00085 
00086 /* object data level */
00087 #define IDB_LOG_DATA_READ   IDB_LOG_MASK(22)
00088 #define IDB_LOG_DATA_CREATE IDB_LOG_MASK(23)
00089 #define IDB_LOG_DATA_WRITE  IDB_LOG_MASK(24)
00090 #define IDB_LOG_DATA_DELETE IDB_LOG_MASK(25)
00091 #define IDB_LOG_DATA_ALL    (IDB_LOG_DATA_CREATE | IDB_LOG_DATA_READ | \
00092                              IDB_LOG_DATA_WRITE | IDB_LOG_DATA_DELETE)
00093 
00094 /* queries */
00095 #define IDB_LOG_OQL_EXEC    IDB_LOG_MASK(26)
00096 #define IDB_LOG_OQL_RESULT  IDB_LOG_MASK(30)
00097 
00098 /* relationship level */
00099 #define IDB_LOG_RELSHIP         IDB_LOG_MASK(27)
00100 #define IDB_LOG_RELSHIP_DETAILS IDB_LOG_MASK(28)
00101 
00102 #define IDB_LOG_SCHEMA_EVOLVE IDB_LOG_MASK(29)
00103 
00104 #define IDB_LOG_USER_BOTTOM  50
00105 #define IDB_LOG_USER_MAX     12
00106 
00107 /* user level */
00108 #define IDB_LOG_USER(X)  \
00109   (((X) >= 0 && (X) < IDB_LOG_USER_MAX) ? \
00110       IDB_LOG_MASK((X+IDB_LOG_USER_BOTTOM)) : \
00111        (unsigned long long)(fprintf(stderr, "out of range user log #%d\n", (X)), 0))
00112 
00113 /* default log mask */
00114 #define IDB_LOG_DEFAULT (IDB_LOG_LOCAL | IDB_LOG_SERVER | IDB_LOG_CONN | \
00115                          IDB_LOG_TRANSACTION | IDB_LOG_DATABASE | \
00116                          IDB_LOG_ADMIN | IDB_LOG_EXCEPTION | IDB_LOG_MTX)
00117 
00118 /* no log */
00119 #define IDB_LOG_NOLOG IDB_LOG_MASK(63)
00120 
00121 namespace eyedblib {
00122   typedef unsigned long long LogMask;
00123   extern LogMask log_mask;
00124 }
00125 
00126 #define IDB_LOG(L, S) \
00127   do {if (((L) & eyedblib::log_mask) == (L)) {utlog_p(#L); utlog S;}} while(0)
00128 
00129 #define IDB_LOG_D(L, S) \
00130   do {if ((((L)|IDB_LOG_DEV) & eyedblib::log_mask) == ((L)|IDB_LOG_DEV)) {utlog_p(#L); utlog S;}} while(0)
00131 
00132 #define IDB_LOG_X(L, S) \
00133   do {if (((L) & eyedblib::log_mask) == (L)) utlog S;} while(0)
00134 
00135 #define IDB_LOG_DX(L, S) \
00136   do {if ((((L)|IDB_LOG_DEV) & eyedblib::log_mask) == ((L)|IDB_LOG_DEV)) utlog S;} while(0)
00137 
00138 #define IDB_LOG_F(S) \
00139   do { \
00140     FILE *logfd; \
00141  \
00142     utlog_p("FATAL_ERROR"); \
00143     utlog S;\
00144  \
00145     logfd = utlogFDSet(stderr); \
00146     utlog_p("FATAL_ERROR"); \
00147     utlog S; \
00148     (void)utlogFDSet(logfd);\
00149    } while (0)
00150 
00151 #define IDB_LOG_FX(S) \
00152   do { \
00153     utlog_p("FATAL_ERROR"); \
00154     utlog S;\
00155    } while (0)
00156 
00157 
00158 extern void utlogInit(const char *progName, const char *devname);
00159 extern FILE *utlogFDGet();
00160 extern FILE *utlogFDSet(FILE *);
00161 extern void utlog(const char *fmt, ...);
00162 extern void utlog_p(const char *s);
00163 extern const char *utlogDevNameGet();
00164 extern void utlogResetTimer();
00165 extern void utlogSetLogDate(int on);
00166 extern void utlogSetLogTimer(int on);
00167 extern void utlogSetLogPid(int on);
00168 extern void utlogSetLogProgName(int on);
00169 
00170 #endif

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