Logger.temp.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. // LogAPI.cpp : 6(Re DLL S&SC3LPr5D5<3v:/J}!#
  2. //
  3. #include "stdafx.h"
  4. #include <stdarg.h>
  5. //#include <windows.h>
  6. //#include <stdio.h>
  7. #include <iostream>
  8. //#include <vector>
  9. #include <string.h>
  10. #include "Logger.temp.h"
  11. #include "SimpleLog.hpp"
  12. #pragma warning(push)
  13. //#pragma warning(disable:4267)
  14. #define ONE_LOG_MAX_SIZE (524288)
  15. TempLogger * g_Logger = NULL;
  16. SimpleLog* g_SLogger = NULL;
  17. char* log_abuff = nullptr;
  18. void CreateLogger(std::shared_ptr <DIOS::Dev::IOEventCenter> EventCenter)
  19. {
  20. g_Logger = new TempLogger(EventCenter);
  21. if (g_SLogger != NULL)
  22. {
  23. if (log_abuff != nullptr)
  24. {
  25. delete [] log_abuff;
  26. log_abuff = nullptr;
  27. }
  28. delete g_SLogger;
  29. g_SLogger = NULL;
  30. }
  31. }
  32. void CreateLogger(std::string strLogName)
  33. {
  34. g_SLogger = new SimpleLog(strLogName.c_str());
  35. log_abuff = new char[ONE_LOG_MAX_SIZE];
  36. if (g_Logger != NULL)
  37. {
  38. delete g_Logger;
  39. g_Logger = NULL;
  40. }
  41. }
  42. void ReleaseLogger()
  43. {
  44. if (g_Logger != NULL)
  45. {
  46. delete g_Logger;
  47. g_Logger = NULL;
  48. }
  49. if (g_SLogger != NULL)
  50. {
  51. if (log_abuff != nullptr)
  52. {
  53. delete[] log_abuff;
  54. log_abuff = nullptr;
  55. }
  56. g_SLogger->Close();
  57. delete g_SLogger;
  58. g_SLogger = NULL;
  59. }
  60. }
  61. void __ReleasePrintA(
  62. LOG_LEVEL level,
  63. /*char* file,*/
  64. int line,
  65. char* function,
  66. char* format,
  67. ...
  68. )
  69. {
  70. //char* strFileName;
  71. DWORD returnedLenth;
  72. va_list args = NULL;
  73. if (g_Logger == NULL && g_SLogger == NULL)
  74. {
  75. return;
  76. }
  77. va_start(args,format);
  78. //strFileName = strrchr( file, '\\' );
  79. //if( NULL == strFileName )
  80. //{
  81. // strFileName = file;
  82. //}
  83. //else
  84. //{
  85. // strFileName++;
  86. //}
  87. if (g_Logger != NULL)
  88. {
  89. WaitForSingleObject(g_Logger->dump_Mutex,INFINITE);
  90. memset(g_Logger->g_log_abuff,0, ONE_LOG_MAX_SIZE);
  91. sprintf_s(g_Logger->g_log_abuff, ONE_LOG_MAX_SIZE, "%s (%s) (%d): ",
  92. g_Logger->GetTime().c_str(), function, line );
  93. vsprintf_s(&(g_Logger->g_log_abuff[strlen(g_Logger->g_log_abuff)]), ONE_LOG_MAX_SIZE/ sizeof(char) - strlen(g_Logger->g_log_abuff),
  94. format, args );
  95. g_Logger->g_log_abuff[strlen(g_Logger->g_log_abuff)] = '\n';
  96. std::string strLog = g_Logger->g_log_abuff;
  97. g_Logger->g_EventCenter->OnLog((int)level, strLog);
  98. ReleaseMutex(g_Logger->dump_Mutex);
  99. }
  100. else
  101. {
  102. sprintf_s(log_abuff, ONE_LOG_MAX_SIZE, " (%s) (%d): ", function, line);
  103. vsprintf_s(&(log_abuff[strlen(log_abuff)]), ONE_LOG_MAX_SIZE / sizeof(char) - strlen(log_abuff), format, args);
  104. //memcpy(&(log_abuff[strlen(log_abuff)]), format, strlen(format));
  105. switch (level)
  106. {
  107. case LOG_LEVEL_INIT:
  108. case LOG_LEVEL_DEBUG:
  109. {
  110. g_SLogger->Debug(log_abuff, args);
  111. break;
  112. }
  113. case LOG_LEVEL_TRACE:
  114. case LOG_LEVEL_INFO:
  115. {
  116. g_SLogger->Info(log_abuff, args);
  117. break;
  118. }
  119. case LOG_LEVEL_WARNING:
  120. {
  121. g_SLogger->Warn(log_abuff, args);
  122. break;
  123. }
  124. case LOG_LEVEL_ERROR:
  125. {
  126. g_SLogger->Error(log_abuff, args);
  127. break;
  128. }
  129. case LOG_LEVEL_FATAL:
  130. {
  131. g_SLogger->Fatal(log_abuff, args);
  132. break;
  133. }
  134. default:
  135. break;
  136. }
  137. }
  138. }
  139. std::string TempLogger::GetTime()
  140. {
  141. SYSTEMTIME st;
  142. GetLocalTime(&st);
  143. char tmp[64] = { 0 };
  144. sprintf_s(tmp, "[%04d %02d %02d] [%02d:%02d:%02d.%3d]", st.wYear, st.wMonth, st.wDay,st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
  145. return std::string(tmp);
  146. }
  147. TempLogger::TempLogger(std::shared_ptr <DIOS::Dev::IOEventCenter> EventCenter)
  148. {
  149. g_log_abuff = new char[ONE_LOG_MAX_SIZE];
  150. g_EventCenter = EventCenter;
  151. dump_Mutex = CreateMutex(0, 0, 0);
  152. }
  153. TempLogger::~TempLogger()
  154. {
  155. delete[]g_log_abuff;
  156. g_log_abuff = NULL;
  157. }
  158. #pragma warning(pop)