yt_log.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #include "yt_log.h"
  2. #include "logger.h"
  3. #include <util/generic/guid.h>
  4. #include <util/system/mutex.h>
  5. namespace NYT {
  6. using namespace NLogging;
  7. ////////////////////////////////////////////////////////////////////////////////
  8. namespace {
  9. class TLogManager
  10. : public ILogManager
  11. {
  12. public:
  13. static constexpr TStringBuf CategoryName = "Wrapper";
  14. public:
  15. void RegisterStaticAnchor(
  16. TLoggingAnchor* anchor,
  17. ::TSourceLocation sourceLocation,
  18. TStringBuf anchorMessage) override
  19. {
  20. auto guard = Guard(Mutex_);
  21. anchor->SourceLocation = sourceLocation;
  22. anchor->AnchorMessage = anchorMessage;
  23. }
  24. void UpdateAnchor(TLoggingAnchor* /*position*/) override
  25. { }
  26. void Enqueue(TLogEvent&& event) override
  27. {
  28. auto message = TString(event.MessageRef.ToStringBuf());
  29. LogMessage(
  30. ToImplLevel(event.Level),
  31. ::TSourceLocation(event.SourceFile, event.SourceLine),
  32. "%.*s",
  33. event.MessageRef.size(),
  34. event.MessageRef.begin());
  35. }
  36. const TLoggingCategory* GetCategory(TStringBuf categoryName) override
  37. {
  38. Y_ABORT_UNLESS(categoryName == CategoryName);
  39. return &Category_;
  40. }
  41. void UpdateCategory(TLoggingCategory* /*category*/) override
  42. {
  43. Y_ABORT();
  44. }
  45. bool GetAbortOnAlert() const override
  46. {
  47. return false;
  48. }
  49. private:
  50. static ILogger::ELevel ToImplLevel(ELogLevel level)
  51. {
  52. switch (level) {
  53. case ELogLevel::Minimum:
  54. case ELogLevel::Trace:
  55. case ELogLevel::Debug:
  56. return ILogger::ELevel::DEBUG;
  57. case ELogLevel::Info:
  58. return ILogger::ELevel::INFO;
  59. case ELogLevel::Warning:
  60. case ELogLevel::Error:
  61. return ILogger::ELevel::ERROR;
  62. case ELogLevel::Alert:
  63. case ELogLevel::Fatal:
  64. case ELogLevel::Maximum:
  65. return ILogger::ELevel::FATAL;
  66. }
  67. }
  68. static void LogMessage(ILogger::ELevel level, const ::TSourceLocation& sourceLocation, const char* format, ...)
  69. {
  70. va_list args;
  71. va_start(args, format);
  72. GetLogger()->Log(level, sourceLocation, format, args);
  73. va_end(args);
  74. }
  75. private:
  76. ::TMutex Mutex_;
  77. std::atomic<int> ActualVersion_{1};
  78. const TLoggingCategory Category_{
  79. .Name{CategoryName},
  80. .MinPlainTextLevel{ELogLevel::Minimum},
  81. .CurrentVersion{1},
  82. .ActualVersion = &ActualVersion_,
  83. };
  84. };
  85. TLogManager LogManager;
  86. } // namespace
  87. ////////////////////////////////////////////////////////////////////////////////
  88. TLogger Logger(&LogManager, TLogManager::CategoryName);
  89. ////////////////////////////////////////////////////////////////////////////////
  90. void FormatValue(TStringBuilderBase* builder, const TGUID& value, TStringBuf /*format*/)
  91. {
  92. builder->AppendString(GetGuidAsString(value));
  93. }
  94. ////////////////////////////////////////////////////////////////////////////////
  95. } // namespace NYT