#pragma once #include <library/cpp/logger/priority.h> #include <util/generic/ptr.h> namespace NGrpc { class TLogger: public TThrRefBase { protected: TLogger() = default; public: [[nodiscard]] bool IsEnabled(ELogPriority priority) const noexcept { return DoIsEnabled(priority); } void Y_PRINTF_FORMAT(3, 4) Write(ELogPriority priority, const char* format, ...) noexcept { va_list args; va_start(args, format); DoWrite(priority, format, args); va_end(args); } protected: virtual bool DoIsEnabled(ELogPriority priority) const noexcept = 0; virtual void DoWrite(ELogPriority p, const char* format, va_list args) noexcept = 0; }; using TLoggerPtr = TIntrusivePtr<TLogger>; #define GRPC_LOG_DEBUG(logger, format, ...) \ if (logger && logger->IsEnabled(ELogPriority::TLOG_DEBUG)) { \ logger->Write(ELogPriority::TLOG_DEBUG, format, __VA_ARGS__); \ } else { } #define GRPC_LOG_INFO(logger, format, ...) \ if (logger && logger->IsEnabled(ELogPriority::TLOG_INFO)) { \ logger->Write(ELogPriority::TLOG_INFO, format, __VA_ARGS__); \ } else { } } // namespace NGrpc