abLog.Log4CPP.hpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. #pragma once
  2. #include <assert.h>
  3. #include "String.DString.hpp"
  4. #include "Log4CPP.TLSLog.hpp"
  5. #define __AB_LOG_LOG4CPP__
  6. //-----------------------------------------------------------------------------
  7. // abLog 是对 gLogger 的简单封装, 可以同时写到两个 Logger 中
  8. //-----------------------------------------------------------------------------
  9. namespace abLog
  10. {
  11. extern Log4CPP::Logger * aLogger;
  12. extern Log4CPP::Logger * bLogger;
  13. inline void NewLine ()
  14. {
  15. if (aLogger) aLogger->NewLine ();
  16. if (bLogger) bLogger->NewLine ();
  17. }
  18. inline bool Decide (int Level)
  19. {
  20. if (! aLogger) return false;
  21. return (aLogger->Decide (Level));
  22. }
  23. template <typename... Args>
  24. inline void DoLog (int Level, const char * fmt, Args && ... args)
  25. {
  26. auto tbuf = Log4CPP::ThreadContext::TLSMessage::Get ();
  27. auto size = Log4CPP::ThreadContext::TLSMessage::Size () - 4;
  28. if (tbuf [0])
  29. return;
  30. auto cch = 0;
  31. if (sizeof...(args) == 0)
  32. {
  33. cch = (int) strlen (fmt);
  34. cch = min (cch, size);
  35. memcpy (tbuf, fmt, cch);
  36. tbuf [cch] = 0;
  37. }
  38. else
  39. {
  40. cch = ECOM::Utility::String::StringFormat (tbuf, size).Format (fmt, std::forward <Args> (args)...);
  41. tbuf [cch] = 0;
  42. }
  43. if (aLogger) if (aLogger->GetLevel () <= Level) aLogger->Flush (Level, cch, tbuf, true);
  44. if (bLogger) if (bLogger->GetLevel () <= Level) bLogger->Flush (Level, cch, tbuf, true);
  45. tbuf [0] = 0;
  46. }
  47. template <typename... Args>
  48. inline void Force (const char * fmt, Args && ... args)
  49. {
  50. DoLog ((int)Log4CPP::enLogLevel::enTrace, fmt, std::forward <Args> (args)...);
  51. }
  52. template <typename... Args>
  53. inline void Verbose (const char * fmt, Args && ... args)
  54. {
  55. DoLog ((int)Log4CPP::enLogLevel::enVerbose, fmt, std::forward <Args> (args)...);
  56. }
  57. template <typename... Args>
  58. inline void Trace (const char * fmt, Args && ... args)
  59. {
  60. DoLog ((int)Log4CPP::enLogLevel::enTrace, fmt, std::forward <Args> (args)...);
  61. }
  62. template <typename... Args>
  63. inline void Debug (const char * fmt, Args && ... args)
  64. {
  65. DoLog ((int)Log4CPP::enLogLevel::enDebug, fmt, std::forward <Args> (args)...);
  66. }
  67. template <typename... Args>
  68. inline void Info (const char * fmt, Args && ... args)
  69. {
  70. DoLog ((int)Log4CPP::enLogLevel::enInfo, fmt, std::forward <Args> (args)...);
  71. }
  72. template <typename... Args>
  73. inline void Notice (const char * fmt, Args && ... args)
  74. {
  75. DoLog ((int)Log4CPP::enLogLevel::enNotice, fmt, std::forward <Args> (args)...);
  76. }
  77. template <typename... Args>
  78. inline void Warn (const char * fmt, Args && ... args)
  79. {
  80. DoLog ((int)Log4CPP::enLogLevel::enWarn, fmt, std::forward <Args> (args)...);
  81. }
  82. template <typename... Args>
  83. inline void Error (const char * fmt, Args && ... args)
  84. {
  85. DoLog ((int)Log4CPP::enLogLevel::enError, fmt, std::forward <Args> (args)...);
  86. }
  87. template <typename... Args>
  88. inline void Fatal (const char * fmt, Args && ... args)
  89. {
  90. DoLog ((int)Log4CPP::enLogLevel::enFatal, fmt, std::forward <Args> (args)...);
  91. }
  92. inline void Flush (const eSTR::DStringView & str)
  93. {
  94. if (aLogger) aLogger->LogNoFormat (Log4CPP::enInfo, str, str.GetLength (), false);
  95. if (bLogger) bLogger->LogNoFormat (Log4CPP::enInfo, str, str.GetLength (), false);
  96. }
  97. inline void Flush (const eSTR::DString & str)
  98. {
  99. if (aLogger) aLogger->LogNoFormat (Log4CPP::enInfo, str, str.GetLength (), false);
  100. if (bLogger) bLogger->LogNoFormat (Log4CPP::enInfo, str, str.GetLength (), false);
  101. }
  102. inline void LogNoFormat (int Level, const eSTR::DString & str, bool bWithLayout = false)
  103. {
  104. if (aLogger) aLogger->LogNoFormat (Level, str, str.GetLength (), bWithLayout);
  105. if (bLogger) bLogger->LogNoFormat (Level, str, str.GetLength (), bWithLayout);
  106. }
  107. inline void LogNoFormat (int Level, const char * buf, int len, bool bWithLayout = false)
  108. {
  109. if (aLogger) aLogger->LogNoFormat (Level, buf, len, bWithLayout);
  110. if (bLogger) bLogger->LogNoFormat (Level, buf, len, bWithLayout);
  111. }
  112. inline void Close ()
  113. {
  114. if (aLogger) aLogger->Close ();
  115. if (bLogger) bLogger->Close ();
  116. }
  117. inline eSTR::DString ErrorCodeToString (DWORD errorCode)
  118. {
  119. return Log4CPP::Logger::ErrorCodeToString (errorCode);
  120. }
  121. inline int CurrentLevel ()
  122. {
  123. if (aLogger) return aLogger->GetLevel ();
  124. if (bLogger) return bLogger->GetLevel ();
  125. return 0;
  126. }
  127. inline eSTR::DString CurrentLevelName ()
  128. {
  129. if (aLogger) return aLogger->LogLevelToString (aLogger->GetLevel ());
  130. if (bLogger) return bLogger->LogLevelToString (bLogger->GetLevel ());
  131. return eSTR::DString ();
  132. }
  133. };