//============================================================================= // YHTTPD // Logging & Debugging //============================================================================= #ifndef __yhttpd_logging_h__ #define __yhttpd_logging_h__ // system #include // yhttpd #include // forward declaration class CWebserverConnection; //----------------------------------------------------------------------------- // Log Level //----------------------------------------------------------------------------- // 1 : Connection Information (called URL) // 2 : Parameters?? // 3 : yParser Main Infos // 5 : ycmd: Every yParser Loop Command expansion // 6 : yresult: Every yParser Loop Command expansion // 8 : Central Functions Detailed // 9 : Socket Operations //----------------------------------------------------------------------------- class CLogging { protected: pthread_mutex_t Log_mutex; FILE *Logfile; bool Debug; bool LogToFile; static CLogging *instance; CLogging(void); ~CLogging(void); public: int LogLevel; // Instance Handling static CLogging *getInstance(void); static void deleteInstance(void); void setDebug(bool _debug); bool getDebug(void); // Logging void printf(const char *fmt, ...); }; //----------------------------------------------------------------------------- // definitions for easy use //----------------------------------------------------------------------------- // print always #define aprintf(fmt, args...) \ do { CLogging::getInstance()->printf("[yhttpd] " fmt, ## args); } while (0) // print show file and linenumber #define log_printfX(fmt, args...) \ do { CLogging::getInstance()->printf("[yhttpd(%s:%d)] " fmt, __file__, __LINE__, ## args); } while (0) //Set Watch Point (show file and linenumber and function) #define WP() \ do { CLogging::getInstance()->printf("[yhttpd(%s:%d)%s]\n", __file__, __LINE__, __FUNCTION__); } while (0) // print if level matches #define log_level_printf(level, fmt, args...) \ do { if(CLogging::getInstance()->LogLevel>=level) CLogging::getInstance()->printf("[yhttpd#%d] " fmt, level, ## args); } while (0) // print if level matches / show file and linenumber #define log_level_printfX(level, fmt, args...) \ do { if(CLogging::getInstance()->LogLevel>=level) CLogging::getInstance()->printf("[yhttpd#%d(%s:%d)] " fmt, level, __file__, __LINE__, ## args); } while (0) // print only if debug is on #define dprintf(fmt, args...) \ do { if(CLogging::getInstance()->getDebug())CLogging::getInstance()->printf("[yhttpd] " fmt, ## args); } while (0) // print string to stdandard error #define dperror(str) \ do { perror("[yhttpd] " str); } while (0) #endif /* __yttpd_logging_h__ */