/TGame/TUtil/Log/LogUtil.cpp

http://awoe.googlecode.com/ · C++ · 135 lines · 112 code · 21 blank · 2 comment · 10 complexity · 02ff39066cf67b7a44114df24634c804 MD5 · raw file

  1. #include "stdafx.h"
  2. #include "Logutil.h"
  3. #include <vector>
  4. #include <string>
  5. #include <cstring>
  6. #include <strsafe.h>
  7. #include <fstream>
  8. #include <time.h>
  9. namespace woe
  10. {
  11. TimeStamp TimeStamp::_startStamp;
  12. TimeStamp::TimeStamp()
  13. {
  14. #ifdef WIN32
  15. //
  16. // time is not accurate use win32 api later
  17. _seconds = (int)::time(NULL);
  18. _microSeconds = 0;
  19. #else
  20. struct timeval tv;
  21. ::gettimeofday(&tv, NULL);
  22. _seconds = tv.tv_sec;
  23. _microSeconds = tv.tv_usec;
  24. #endif
  25. }
  26. TimeStamp::TimeStamp(unsigned int seconds, unsigned int microSeconds) :
  27. _seconds(seconds),
  28. _microSeconds(microSeconds)
  29. {
  30. }
  31. void TimeStamp::format(std::string& fmt)const
  32. {
  33. struct std::tm currentTime;
  34. time_t t = getSeconds();
  35. localtime_s(&currentTime, &t);
  36. char formatted[100];
  37. StringCbPrintf( formatted,
  38. 100,
  39. TS("%04d-%02d-%02d %02d:%02d:%02d"),
  40. currentTime.tm_year +1900,
  41. currentTime.tm_mon +1,
  42. currentTime.tm_mday,
  43. currentTime.tm_hour,
  44. currentTime.tm_min,
  45. currentTime.tm_sec );
  46. fmt = formatted;
  47. }
  48. const string& getLogLevelName(short lvl)
  49. {
  50. static std::vector<string> __log_level_names;
  51. static string __default_name = TS("unknown");
  52. if (__log_level_names.empty())
  53. {
  54. __log_level_names.push_back(TS("debug"));
  55. __log_level_names.push_back(TS("info"));
  56. __log_level_names.push_back(TS("warn"));
  57. __log_level_names.push_back(TS("error"));
  58. __log_level_names.push_back(TS("fatal"));
  59. }
  60. if (lvl>=0 && lvl<(int)__log_level_names.size())
  61. {
  62. return __log_level_names[lvl];
  63. }
  64. else
  65. {
  66. return __default_name;
  67. }
  68. }
  69. #ifdef UNICODE
  70. #define atoint _wtoi
  71. #else
  72. #define atoint atoi
  73. #endif
  74. std::vector<string> LogLevelUtil::__log_level_names;
  75. const string& LogLevelUtil::getLogLevelName(short lvl)
  76. {
  77. static string __default_name = TS("unknown");
  78. if (__log_level_names.empty())
  79. {
  80. __log_level_names.push_back(TS("debug"));
  81. __log_level_names.push_back(TS("info"));
  82. __log_level_names.push_back(TS("warn"));
  83. __log_level_names.push_back(TS("error"));
  84. __log_level_names.push_back(TS("fatal"));
  85. }
  86. if (lvl>=0 && lvl<(int)__log_level_names.size())
  87. {
  88. return __log_level_names[lvl];
  89. }
  90. else
  91. {
  92. return __default_name;
  93. }
  94. }
  95. short LogLevelUtil::getLogLevel(const string& lvlName)
  96. {
  97. if (__log_level_names.empty())
  98. {
  99. __log_level_names.push_back(TS("debug"));
  100. __log_level_names.push_back(TS("info"));
  101. __log_level_names.push_back(TS("warn"));
  102. __log_level_names.push_back(TS("error"));
  103. __log_level_names.push_back(TS("fatal"));
  104. }
  105. for (size_t i=0; i<__log_level_names.size(); i++)
  106. {
  107. if (lvlName == __log_level_names[i])
  108. {
  109. return short(i);
  110. }
  111. }
  112. return 0;
  113. }
  114. }