/** ****************************************************************************** @file /common/Log.h @brief Logovaci trida @author Vta, Vajicek @version 0.1 ******************************************************************************/ #ifndef LOG_H #define LOG_H #include "config.h" #define DEFAULT_PRIORITY_LOG 5 ///< cim vetsi prioritu zprava ma tim vyznamejsi, aby se logovala musi byt vetsi nez toto #define GLOBALLOG_STDOUT 0 ///< 1 logovani do konzole, 0 logovani do souboru, "file" logovani do konkretniho souboru #ifndef LOG_DIR #define LOG_DIR "log/" ///< adresar pro generovane logsoubory, alterantivni definice #endif /** Definice globalnich logovacich maker. */ #ifdef K8_LOG #define GLOBALLOG Log.LogMsg #define GLOBALLOGID Log.LogMsgId #else #define GLOBALLOG #define GLOBALLOGID #endif /** Velikost bufferu pro logovaci zpravy. */ #define MAXLOGBUFFER_LEN 1024 #include #include /** Funkce na zjisteni a posun do spravneho adresare ve Win32 */ void CheckDirectory(); /** Logovaci trida. Necha se nekonecne rozsirovat, ale musi vzdy zachovat zpetnou kompatibilitu. */ class TLog { private: char buffer[MAXLOGBUFFER_LEN]; private: int sout; ///< zda-li se zapisuje na stdout nebo do file char file[255]; ///< jmeno file, do ktereho se bude zapisovat, pokud neni sout==1 int priority; ///< pouze zpravy s mensi prioritou nez je toto cislo budou logovany int counter; ///< pocitadlo, muze se hodit napr pri odhadovani kolikrat prosel program nejakym mistem public: /** Resetuj pocitadlo. */ void RC(); /** Incrementuj pocitadlo. */ void IC(); /** Uloz hodnotu pocitadla do logu. */ void LC(); /** Logovaci zprava. Loguj ve stylu prinrf. Bud na standardni vystup, nebo do souboru. @param format formatovaci retezec */ void LogMsg(char* format,...); /** Logovaci zprava. Loguj ve stylu prinrf s prioritou. Bud na standardni vystup, nebo do souboru. @param prior priorita logovani @param format formatovaci retezec */ void LogMsgId(int prior, const char* format,...); /** Logovaci zprava pro pole. @param c pocet @param s velikost jednoho @param formatone formatovaci retezec pro jednoho @param d pole */ void LogArray(int c,int s,char* formatone,void* d); /** Podminecne ukonceni se zalogovanim. @param b hodnota podminky @param str logovaci zprava */ void AssertMsg(int b,char* str); /** Konstruktor pro logovani do souboru @param file jmeno souboru v adresari LOG_DIR @param prior priorita */ TLog(char* file, int prior = DEFAULT_PRIORITY_LOG); ///< pouzije jmeno fajlu /** Konstruktor pro logovani do souboru @param so =1 loguj na standardni vystup =0 loguj do souboru nahodne vygenerovaneho jmena v adresari LOG_DIR @param prior priorita */ TLog(int so = 1, int prior = DEFAULT_PRIORITY_LOG); ///< vygeneruje si jmeno fajlu }; /** Globalni log. */ extern TLog Log; /** Profiler. Profiler slouzi k ladeni rychlosti jednotlivych kusu kodu. Kod se obali makry PROFILER_START a PROFILER_STOP, ktere pocitaji a loguji cas. */ #ifdef K8_PROFILER #include "gui/common/KTime.h" /** Globalni log pro profiler. */ extern TLog Profiler; /** Zacatek bloku profileru. */ #define PROFILER_START Profiler.LogMsg("start T:%08d %s: %d\n",KTime(),__FILE__,__LINE__); /** Konec bloku profileru. */ #define PROFILER_STOP Profiler.LogMsg("stop T:%08d %s: %d\n",KTime(),__FILE__,__LINE__); #endif /** Pomucka pro ladeni realtime */ #define GRRR printf(">>>%s :%d\n",__FILE__,__LINE__); /** Jednorazovy vypis chyby/hlasky. */ extern void CONSOLE(char* msg); #endif /*****************************************************************************/