00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 #ifndef __EXP_LOGGER_H__
00019 #define __EXP_LOGGER_H__
00020 
00021 #ifdef __cplusplus
00022 extern "C"
00023 {
00024 #endif
00025 
00026 #include <liblogger/liblogger_levels.h>
00027 #include <liblogger/liblogger_config.h>
00028 
00029 
00030 #define LIBLOGGER_MAJOR_VERSION 0
00031 
00032 #define LIBLOGGER_MINOR_VERSION 1
00033 
00034 
00035 
00036 #ifndef LOG_LEVEL
00037 #define LOG_LEVEL LOG_LEVEL_TRACE
00038 #endif
00039 
00040 
00041 #ifndef LOG_MODULE_NAME
00042 #define LOG_MODULE_NAME ""
00043 #endif
00044 
00045 
00046 
00047 
00048 typedef enum LogDest
00049 {
00050 
00051         LogToFile,
00052 
00053         LogToConsole,
00054 
00055 
00056         LogToSocket
00057 }LogDest;
00058 
00059 
00060 
00061 
00062 #undef VARIADIC_MACROS
00063 
00064 #if !defined(DISABLE_VARIADIC_CHECK) && (defined(__GNUC__) || (_MSC_VER >= 1400))
00065         
00066 
00067 
00068         #define VARIADIC_MACROS
00069 #endif
00070 
00071 
00072 #ifdef ASSUME_VARIADIC_SUPPORT
00073         #define VARIADIC_MACROS
00074 #endif  
00075 
00076 
00077 #ifdef DISABLE_ALL_LOGS
00078 #ifdef __GNUC__
00079 
00080 #warning Logger disabled.
00081 #endif // __GNUC__
00082 
00083         #define LogTrace                
00084         #define LogDebug                
00085         #define LogInfo                 
00086         #define LogWarn                 
00087         #define LogError                
00088         #define LogFatal                
00089         #define LogFuncEntry()  
00090         #define LogFuncExit()   
00091         #define InitLogger              
00092         #define DeInitLogger()  
00093 #else
00094 
00095         
00096         #if defined(WIN32) || defined(_WIN32)
00097         #define __func__ __FUNCTION__
00098         #endif
00099 
00100         
00101 
00102         #ifdef VARIADIC_MACROS  
00103         int LogStub_vm(LogLevel logLevel,
00104                 const char* moduleName,const char* file,
00105                 const char* funcName, const int lineNum,
00106                 const char* fmt,...);
00107         #endif
00108 
00109 
00110 
00111 
00112 
00113 
00114         int InitLogger(LogDest ldest,void* loggerInitParams);
00115 
00116 
00117         void DeInitLogger();
00118 
00119 
00120         
00121         #if LOG_LEVEL<= LOG_LEVEL_TRACE
00122                 #ifdef VARIADIC_MACROS
00123                         #if defined(DISABLE_FILENAMES)
00124                                 
00125                                 #define LogTrace(fmt, ...) LogStub_vm(Trace,LOG_MODULE_NAME,"",__func__, __LINE__ , fmt , ## __VA_ARGS__)
00126                         #else 
00127                                 #define LogTrace(fmt, ...) LogStub_vm(Trace,LOG_MODULE_NAME,__FILE__,__func__, __LINE__ , fmt , ## __VA_ARGS__)
00128                         #endif // DISABLE_FILENAMES
00129                 #else
00130 
00131                         int LogTrace(const char *fmt, ...);
00132                 #endif // VARIADIC_MACROS
00133         #else
00134                 
00135                 #define LogTrace        
00136         #endif
00137 
00138         
00139         #if LOG_LEVEL<= LOG_LEVEL_DEBUG
00140                 #ifdef VARIADIC_MACROS
00141                         #if defined(DISABLE_FILENAMES)
00142                                 
00143                                 #define LogDebug(fmt, ...) LogStub_vm(Debug,LOG_MODULE_NAME,"",__func__, __LINE__ , fmt , ## __VA_ARGS__)
00144                         #else 
00145                                 #define LogDebug(fmt, ...) LogStub_vm(Debug,LOG_MODULE_NAME,__FILE__,__func__, __LINE__ , fmt , ## __VA_ARGS__)
00146                         #endif // DISABLE_FILENAMES
00147                 #else
00148 
00149                         int LogDebug(const char *fmt, ...);
00150                 #endif // VARIADIC_MACROS
00151         #else
00152                 
00153                 #define LogDebug        
00154         #endif
00155 
00156         
00157         #if LOG_LEVEL<= LOG_LEVEL_INFO
00158                 #ifdef VARIADIC_MACROS
00159                         #if defined(DISABLE_FILENAMES)
00160                                 
00161                                 #define LogInfo(fmt, ...) LogStub_vm(Info,LOG_MODULE_NAME,"",__func__, __LINE__ , fmt , ## __VA_ARGS__)
00162                         #else 
00163                                 #define LogInfo(fmt, ...) LogStub_vm(Info,LOG_MODULE_NAME,__FILE__,__func__, __LINE__ , fmt , ## __VA_ARGS__)
00164                         #endif // DISABLE_FILENAMES
00165                 #else
00166 
00167                         int LogInfo(const char *fmt, ...);
00168                 #endif // VARIADIC_MACROS
00169         #else
00170                 
00171                 #define LogInfo 
00172         #endif
00173 
00174         
00175         #if LOG_LEVEL<= LOG_LEVEL_WARN
00176                 #ifdef VARIADIC_MACROS
00177                         #if defined(DISABLE_FILENAMES)
00178                                 
00179                                 #define LogWarn(fmt, ...) LogStub_vm(Warn,LOG_MODULE_NAME,"",__func__, __LINE__ , fmt , ## __VA_ARGS__)
00180                         #else 
00181                                 #define LogWarn(fmt, ...) LogStub_vm(Warn,LOG_MODULE_NAME,__FILE__,__func__, __LINE__ , fmt , ## __VA_ARGS__)
00182                         #endif // DISABLE_FILENAMES
00183                 #else
00184 
00185                         int LogWarn(const char *fmt, ...);
00186                 #endif // VARIADIC_MACROS
00187         #else
00188                 
00189                 #define LogWarn 
00190         #endif
00191 
00192         
00193         #if LOG_LEVEL<= LOG_LEVEL_ERROR
00194                 #ifdef VARIADIC_MACROS
00195                         #if defined(DISABLE_FILENAMES)
00196                                 
00197                                 #define LogError(fmt, ...) LogStub_vm(Error,LOG_MODULE_NAME,"",__func__, __LINE__ , fmt , ## __VA_ARGS__)
00198                         #else 
00199                                 #define LogError(fmt, ...) LogStub_vm(Error,LOG_MODULE_NAME,__FILE__,__func__, __LINE__ , fmt , ## __VA_ARGS__)
00200                         #endif // DISABLE_FILENAMES
00201                 #else
00202 
00203                         int LogError(const char *fmt, ...);
00204                 #endif // VARIADIC_MACROS
00205         #else
00206                 
00207                 #define LogError        
00208         #endif
00209 
00210         
00211         #if LOG_LEVEL<= LOG_LEVEL_FATAL
00212                 #ifdef VARIADIC_MACROS
00213                         #if defined(DISABLE_FILENAMES)
00214                                 
00215                                 #define LogFatal(fmt, ...) LogStub_vm(Fatal,LOG_MODULE_NAME,"",__func__, __LINE__ , fmt , ## __VA_ARGS__)
00216                         #else 
00217                                 #define LogFatal(fmt, ...) LogStub_vm(Fatal,LOG_MODULE_NAME,__FILE__,__func__, __LINE__ , fmt , ## __VA_ARGS__)
00218                         #endif // DISABLE_FILENAMES
00219                 #else
00220 
00221                         int LogFatal(const char *fmt, ...);
00222                 #endif // VARIADIC_MACROS
00223         #else
00224                 
00225                 #define LogFatal        
00226         #endif
00227 
00228         #if LOG_LEVEL<= LOG_LEVEL_TRACE
00229                 
00230                 int FuncLogEntry(const char* funcName);
00231                 
00232                 int FuncLogExit(const char* funcName,const int lineNumber);
00233                 
00234                 #define LogFuncEntry()  FuncLogEntry(__func__)
00235                 #define LogFuncExit()   FuncLogExit(__func__,__LINE__)
00236                 
00237         #else
00238                 
00239                 #define LogFuncEntry()  
00240                 #define LogFuncExit()   
00241         #endif
00242 
00243 #endif // DISABLE_ALL_LOGS
00244 
00245 
00246 #ifdef __cplusplus
00247 }
00248 #endif 
00249 
00250 #endif 
00251