#include "yt_log.h" #include "logger.h" #include #include namespace NYT { using namespace NLogging; //////////////////////////////////////////////////////////////////////////////// namespace { class TLogManager : public ILogManager { public: static constexpr TStringBuf CategoryName = "Wrapper"; public: void RegisterStaticAnchor( TLoggingAnchor* anchor, ::TSourceLocation sourceLocation, TStringBuf anchorMessage) override { if (auto* defaultLogManager = GetDefaultLogManager()) { defaultLogManager->RegisterStaticAnchor(anchor, sourceLocation, anchorMessage); } auto guard = Guard(Mutex_); anchor->SourceLocation = sourceLocation; anchor->AnchorMessage = anchorMessage; } void UpdateAnchor(TLoggingAnchor* anchor) override { if (auto* defaultLogManager = GetDefaultLogManager()) { defaultLogManager->UpdateAnchor(anchor); } } void Enqueue(TLogEvent&& event) override { if (auto logger = GetLogger()) { LogMessage( logger, ToImplLevel(event.Level), ::TSourceLocation(event.SourceFile, event.SourceLine), "%.*s", event.MessageRef.size(), event.MessageRef.begin()); } else if (auto* defaultLogManager = GetDefaultLogManager()) { defaultLogManager->Enqueue(std::move(event)); } } const TLoggingCategory* GetCategory(TStringBuf categoryName) override { Y_ABORT_UNLESS(categoryName == CategoryName); return &Category_; } void UpdateCategory(TLoggingCategory* /*category*/) override { Y_ABORT(); } bool GetAbortOnAlert() const override { return false; } private: static ILogger::ELevel ToImplLevel(ELogLevel level) { switch (level) { case ELogLevel::Minimum: case ELogLevel::Trace: case ELogLevel::Debug: return ILogger::ELevel::DEBUG; case ELogLevel::Info: return ILogger::ELevel::INFO; case ELogLevel::Warning: case ELogLevel::Error: return ILogger::ELevel::ERROR; case ELogLevel::Alert: case ELogLevel::Fatal: case ELogLevel::Maximum: return ILogger::ELevel::FATAL; } } static void LogMessage(const ILoggerPtr& /* logger */, ILogger::ELevel level, const ::TSourceLocation& sourceLocation, const char* format, ...) { va_list args; va_start(args, format); GetLogger()->Log(level, sourceLocation, format, args); va_end(args); } private: ::TMutex Mutex_; std::atomic ActualVersion_{1}; const TLoggingCategory Category_{ .Name{CategoryName}, .MinPlainTextLevel{ELogLevel::Minimum}, .CurrentVersion{1}, .ActualVersion = &ActualVersion_, }; }; TLogManager LogManager; } // namespace //////////////////////////////////////////////////////////////////////////////// TLogger Logger(&LogManager, TLogManager::CategoryName); //////////////////////////////////////////////////////////////////////////////// void FormatValue(TStringBuilderBase* builder, const TGUID& value, TStringBuf /*format*/) { builder->AppendString(GetGuidAsString(value)); } //////////////////////////////////////////////////////////////////////////////// } // namespace NYT