CLogger.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #pragma once
  2. #include "CConsoleHandler.h"
  3. /*
  4. * CLogger.h, part of VCMI engine
  5. *
  6. * Authors: listed in file AUTHORS in main folder
  7. *
  8. * License: GNU General Public License v2.0 or later
  9. * Full text of license available in license.txt file, in main folder
  10. *
  11. */
  12. extern DLL_LINKAGE std::ostream *logfile;
  13. extern DLL_LINKAGE CConsoleHandler *console;
  14. // CLogger, prints log info to console and saves in file
  15. class DLL_LINKAGE CLogger
  16. {
  17. const int lvl;
  18. #ifdef ANDROID
  19. std::ostringstream buf;
  20. int androidloglevel;
  21. void outputAndroid();
  22. #endif
  23. public:
  24. static const int CONSOLE_LOGGING_LEVEL;
  25. static const int FILE_LOGGING_LEVEL;
  26. CLogger& operator<<(std::ostream& (*fun)(std::ostream&));
  27. template<typename T>
  28. CLogger & operator<<(const T & data)
  29. {
  30. #ifdef ANDROID
  31. buf << data;
  32. outputAndroid();
  33. #else
  34. if(lvl < CLogger::CONSOLE_LOGGING_LEVEL)
  35. {
  36. if(console)
  37. console->print(data, lvl);
  38. else
  39. std::cout << data << std::flush;
  40. }
  41. if((lvl < CLogger::FILE_LOGGING_LEVEL) && logfile)
  42. *logfile << data << std::flush;
  43. #endif
  44. return *this;
  45. }
  46. CLogger(const int Lvl);
  47. };
  48. extern DLL_LINKAGE CLogger tlog0; //green - standard progress info
  49. extern DLL_LINKAGE CLogger tlog1; //red - big errors
  50. extern DLL_LINKAGE CLogger tlog2; //magenta - major warnings
  51. extern DLL_LINKAGE CLogger tlog3; //yellow - minor warnings
  52. extern DLL_LINKAGE CLogger tlog4; //white - detailed log info
  53. extern DLL_LINKAGE CLogger tlog5; //gray - minor log info
  54. extern DLL_LINKAGE CLogger tlog6; //teal - AI info