CLogger.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #include "StdInc.h"
  2. #include "CLogger.h"
  3. /*
  4. * CLogger.cpp, 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. // Console, file definitions
  13. DLL_LINKAGE CConsoleHandler *console = NULL;
  14. DLL_LINKAGE std::ostream *logfile = NULL;
  15. // CLogger definitions
  16. DLL_LINKAGE CLogger tlog0(0);
  17. DLL_LINKAGE CLogger tlog1(1);
  18. DLL_LINKAGE CLogger tlog2(2);
  19. DLL_LINKAGE CLogger tlog3(3);
  20. DLL_LINKAGE CLogger tlog4(4);
  21. DLL_LINKAGE CLogger tlog5(5);
  22. DLL_LINKAGE CLogger tlog6(-2);
  23. // Logging level settings
  24. const int CLogger::CONSOLE_LOGGING_LEVEL = 5;
  25. const int CLogger::FILE_LOGGING_LEVEL = 6;
  26. CLogger::CLogger(const int Lvl) : lvl(Lvl)
  27. {
  28. #ifdef ANDROID
  29. androidloglevel = ANDROID_LOG_INFO;
  30. switch(lvl) {
  31. case 0: androidloglevel = ANDROID_LOG_INFO; break;
  32. case 1: androidloglevel = ANDROID_LOG_FATAL; break;
  33. case 2: androidloglevel = ANDROID_LOG_ERROR; break;
  34. case 3: androidloglevel = ANDROID_LOG_WARN; break;
  35. case 4: androidloglevel = ANDROID_LOG_INFO; break;
  36. case 5: androidloglevel = ANDROID_LOG_DEBUG; break;
  37. case 6: case -2: androidloglevel = ANDROID_LOG_VERBOSE; break;
  38. }
  39. #endif
  40. }
  41. #ifdef ANDROID
  42. void CLogger::outputAndroid()
  43. {
  44. int pos = buf.str().find("\n");
  45. while( pos >= 0 )
  46. {
  47. __android_log_print(androidloglevel, "VCMI", "%s", buf.str().substr(0, pos).c_str() );
  48. buf.str( buf.str().substr(pos+1) );
  49. pos = buf.str().find("\n");
  50. }
  51. }
  52. #endif
  53. CLogger& CLogger::operator<<(std::ostream& (*fun)(std::ostream&))
  54. {
  55. #ifdef ANDROID
  56. buf << fun;
  57. outputAndroid();
  58. #else
  59. if(lvl < CLogger::CONSOLE_LOGGING_LEVEL)
  60. std::cout << fun;
  61. if((lvl < CLogger::FILE_LOGGING_LEVEL) && logfile)
  62. *logfile << fun;
  63. #endif
  64. return *this;
  65. }