CLogger.cpp 1.6 KB

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