CLog.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. #pragma once
  2. #include <iostream>
  3. #include <sstream>
  4. #include <string>
  5. //#pragma warning(disable:4251)
  6. #define PRINT_TERMINAL(f,l,s) printf("%s(%d) - %s\n", f, l, s);
  7. namespace log4cplus
  8. {
  9. class Logger;
  10. }
  11. //class LogStream;
  12. #define OPEN_DEBUG_LOG LogStream::OpenDebugLog(true);
  13. #define PRINT_DEBUG(fmt,...) {\
  14. char buffer[1024];\
  15. snprintf(buffer, 1024, fmt, __VA_ARGS__);\
  16. LogStream(LogStream::LogLevel::Debug, __FILE__, __LINE__, "")\
  17. << buffer; \
  18. PRINT_TERMINAL( __FILE__, __LINE__,buffer); \
  19. }
  20. #define PRINT_INFO(fmt,...) {\
  21. char buffer[1024];\
  22. snprintf(buffer, 1024, fmt, __VA_ARGS__);\
  23. LogStream(LogStream::LogLevel::Info, __FILE__, __LINE__, "")\
  24. << buffer; \
  25. PRINT_TERMINAL( __FILE__, __LINE__,buffer); \
  26. }
  27. #define PRINT_WARN(fmt,...) {\
  28. char buffer[1024];\
  29. snprintf(buffer, 1024, fmt, __VA_ARGS__);\
  30. LogStream(LogStream::LogLevel::Warn, __FILE__, __LINE__, "")\
  31. << buffer; \
  32. PRINT_TERMINAL( __FILE__, __LINE__,buffer); \
  33. }
  34. #define PRINT_ERROR(fmt,...) {\
  35. char buffer[1024];\
  36. snprintf(buffer, 1024, fmt, __VA_ARGS__);\
  37. LogStream(LogStream::LogLevel::Error, __FILE__, __LINE__, "")\
  38. << buffer; \
  39. PRINT_TERMINAL( __FILE__, __LINE__,buffer); \
  40. }
  41. #define PRINT_FATAL(fmt,...) {\
  42. char buffer[1024];\
  43. snprintf(buffer, 1024, fmt, __VA_ARGS__);\
  44. LogStream(LogStream::LogLevel::Fatal, __FILE__, __LINE__, "")\
  45. << buffer; \
  46. PRINT_TERMINAL( __FILE__, __LINE__,buffer); \
  47. }
  48. #define LOG_DEBUG(id,fmt,...) {\
  49. char buffer[1024];\
  50. snprintf(buffer, 1024, fmt, __VA_ARGS__);\
  51. LogStream(LogStream::LogLevel::Debug, __FILE__, __LINE__, "")\
  52. << "ErrorId("<< id << ") " << buffer; \
  53. PRINT_TERMINAL( __FILE__, __LINE__,buffer); \
  54. }
  55. #define LOG_INFO(id,fmt,...) {\
  56. char buffer[1024];\
  57. snprintf(buffer, 1024, fmt, __VA_ARGS__);\
  58. LogStream(LogStream::LogLevel::Info, __FILE__, __LINE__, "")\
  59. << "ErrorId("<< id << ") " << buffer; \
  60. PRINT_TERMINAL( __FILE__, __LINE__,buffer); \
  61. }
  62. #define LOG_WARN(id,fmt,...) {\
  63. char buffer[1024];\
  64. snprintf(buffer, 1024, fmt, __VA_ARGS__);\
  65. LogStream(LogStream::LogLevel::Warn, __FILE__, __LINE__, "")\
  66. << "ErrorId("<< id << ") " << buffer; \
  67. PRINT_TERMINAL( __FILE__, __LINE__,buffer); \
  68. }
  69. #define LOG_ERROR(id,fmt,...) {\
  70. char buffer[1024];\
  71. snprintf(buffer, 1024, fmt, __VA_ARGS__);\
  72. LogStream(LogStream::LogLevel::Error, __FILE__, __LINE__, "")\
  73. << "ErrorId("<< id << ") " << buffer; \
  74. PRINT_TERMINAL( __FILE__, __LINE__,buffer); \
  75. }
  76. #define LOG_FATAL(id,fmt,...) {\
  77. char buffer[1024];\
  78. snprintf(buffer, 1024, fmt, __VA_ARGS__);\
  79. LogStream(LogStream::LogLevel::Fatal, __FILE__, __LINE__, "")\
  80. << "ErrorId("<< id << ") " << buffer; \
  81. PRINT_TERMINAL( __FILE__, __LINE__,buffer); \
  82. }
  83. #define LOG_ERROR_RETURN(id,fmt,...) {\
  84. char buffer[1024];\
  85. snprintf(buffer, 1024, fmt, __VA_ARGS__);\
  86. LogStream(LogStream::LogLevel::Error, __FILE__, __LINE__, "")\
  87. << "ErrorId("<< id << ") " << buffer; \
  88. PRINT_TERMINAL( __FILE__, __LINE__,buffer); \
  89. return id;\
  90. }
  91. #define LOG_FATAL_RETURN(id,fmt,...) {\
  92. char buffer[1024];\
  93. snprintf(buffer, 1024, fmt, __VA_ARGS__);\
  94. LogStream(LogStream::LogLevel::Fatal, __FILE__, __LINE__, "")\
  95. << "ErrorId("<< id << ") " << buffer; \
  96. PRINT_TERMINAL( __FILE__, __LINE__,buffer); \
  97. return id;\
  98. }
  99. #define LogInfo LogStream(LogStream::LogLevel::Info, __FILE__, __LINE__, __FUNCTION__)
  100. #define LogError LogStream(LogStream::LogLevel::Error, __FILE__, __LINE__, __FUNCTION__)
  101. #define LogWarn LogStream(LogStream::LogLevel::Warn, __FILE__, __LINE__, __FUNCTION__)
  102. #define LogDebug LogStream(LogStream::LogLevel::Debug, __FILE__, __LINE__, __FUNCTION__)
  103. #define LogFatal LogStream(LogStream::LogLevel::Fatal, __FILE__, __LINE__, __FUNCTION__)
  104. //新增模块日志输出:LogInfoP("ModeName","DirName") << "hahahahahahhahaha";
  105. //其中ModeName为单独生成的日志文件名称, DirName为日志文件写入的文件名
  106. #define LogInfoP(moduleName, pathName) LogStream(moduleName, pathName,LogStream::LogLevel::Info, __FILE__, __LINE__, __FUNCTION__)
  107. #define LogErrorP(moduleName, pathName) LogStream(moduleName, pathName,LogStream::LogLevel::Error, __FILE__, __LINE__, __FUNCTION__)
  108. #define LogWarnP(moduleName, pathName) LogStream(moduleName, pathName,LogStream::LogLevel::Warn, __FILE__, __LINE__, __FUNCTION__)
  109. #define LogDebugP(moduleName, pathName) LogStream(moduleName, pathName,LogStream::LogLevel::Debug, __FILE__, __LINE__, __FUNCTION__)
  110. #define LogFatalP(moduleName, pathName) LogStream(moduleName, pathName,LogStream::LogLevel::Fatal, __FILE__, __LINE__, __FUNCTION__)
  111. //
  112. class SBTLogger;
  113. class __declspec(dllexport) LogStream {
  114. public:
  115. enum LogLevel
  116. {
  117. Info,
  118. Error,
  119. Warn,
  120. Debug,
  121. Fatal,
  122. };
  123. static void OpenDebugLog(bool bOpen);
  124. LogStream(LogLevel level, const char* file, int line, const char* function, bool clean = false);
  125. LogStream(const std::string& moduleName, const std::string& pathName, LogLevel level, const char* file, int line, const char* function, bool clean = false);
  126. template<typename T>
  127. LogStream& operator<<(const T& message) {
  128. ss << message;
  129. return *this;
  130. }
  131. ~LogStream();
  132. private:
  133. //log4cplus::Logger &logger;
  134. //log4cplus::Logger moduleLogger;
  135. bool isModule = false;
  136. LogLevel m_level;
  137. const char* file;
  138. int line;
  139. const char* function;
  140. std::ostringstream ss;
  141. bool clean;
  142. std::string m_moduleName = "";
  143. std::string m_pathName = "";
  144. };