2020#include < climits>
2121#include < functional>
2222#include < memory>
23- #include < mutex>
2423#include < string>
2524#include < thread>
2625#include < vector>
@@ -46,15 +45,6 @@ class KafkaClient
4645 */
4746 const std::string& name () const { return _clientName; }
4847
49- /* *
50- * Set a log callback for kafka clients, which do not have a client specific logging callback configured (see `setLogCallback`).
51- */
52- static void setGlobalLogger (Logger logger = NullLogger)
53- {
54- std::call_once (Global<>::initOnce, [](){}); // Then no need to init within KafkaClient constructor
55- Global<>::logger = std::move (logger);
56- }
57-
5848 /* *
5949 * Set log level for the kafka client (the default value: 5).
6050 */
@@ -90,12 +80,11 @@ class KafkaClient
9080 template <class ...Args>
9181 void doLog (int level, const char * filename, int lineno, const char * format, Args... args) const
9282 {
93- const auto & logger = _logCb ? _logCb : Global<>::logger;
94- if (level >= 0 && level <= _logLevel && logger)
83+ if (level >= 0 && level <= _logLevel && _logCb)
9584 {
9685 LogBuffer<LOG_BUFFER_SIZE> logBuffer;
9786 logBuffer.print (" %s " , name ().c_str ()).print (format, args...);
98- logger (level, filename, lineno, logBuffer.c_str ());
87+ _logCb (level, filename, lineno, logBuffer.c_str ());
9988 }
10089 }
10190
@@ -106,28 +95,6 @@ class KafkaClient
10695
10796#define KAFKA_API_DO_LOG (lvl, ...) doLog(lvl, __FILE__, __LINE__, ##__VA_ARGS__)
10897
109- template <class ...Args>
110- static void doGlobalLog (int level, const char * filename, int lineno, const char * format, Args... args)
111- {
112- if (!Global<>::logger) return ;
113-
114- LogBuffer<LOG_BUFFER_SIZE> logBuffer;
115- logBuffer.print (format, args...);
116- Global<>::logger (level, filename, lineno, logBuffer.c_str ());
117- }
118- static void doGlobalLog (int level, const char * filename, int lineno, const char * msg)
119- {
120- doGlobalLog (level, filename, lineno, " %s" , msg);
121- }
122-
123- /* *
124- * Log for kafka clients, with the callback which `setGlobalLogger` assigned.
125- *
126- * E.g,
127- * KAFKA_API_LOG(Log::Level::Err, "something wrong happened! %s", detailedInfo.c_str());
128- */
129- #define KAFKA_API_LOG (lvl, ...) KafkaClient::doGlobalLog(lvl, __FILE__, __LINE__, ##__VA_ARGS__)
130-
13198#if COMPILER_SUPPORTS_CPP_17
13299 static constexpr int DEFAULT_METADATA_TIMEOUT_MS = 10000 ;
133100#else
@@ -169,14 +136,6 @@ class KafkaClient
169136 // Buffer size for single line logging
170137 static const constexpr int LOG_BUFFER_SIZE = 1024 ;
171138
172- // Global logger
173- template <typename T = void >
174- struct Global
175- {
176- static Logger logger;
177- static std::once_flag initOnce;
178- };
179-
180139 // Validate properties (and fix it if necesary)
181140 static Properties validateAndReformProperties (const Properties& properties);
182141
@@ -197,8 +156,8 @@ class KafkaClient
197156 std::string _clientName;
198157
199158 std::atomic<int > _logLevel = {Log::Level::Notice};
200- Logger _logCb;
201159
160+ LogCallback _logCb = DefaultLogger;
202161 StatsCallback _statsCb;
203162 ErrorCallback _errorCb;
204163 OauthbearerTokenRefreshCallback _oauthbearerTokenRefreshCb;
@@ -247,10 +206,6 @@ class KafkaClient
247206 void interceptThreadStart (const std::string& threadName, const std::string& threadType);
248207 void interceptThreadExit (const std::string& threadName, const std::string& threadType);
249208
250- static const constexpr char * BOOTSTRAP_SERVERS = " bootstrap.servers" ;
251- static const constexpr char * CLIENT_ID = " client.id" ;
252- static const constexpr char * LOG_LEVEL = " log_level" ;
253-
254209protected:
255210 struct Pollable
256211 {
@@ -331,11 +286,6 @@ class KafkaClient
331286 std::unique_ptr<PollThread> _pollThread;
332287};
333288
334- template <typename T>
335- Logger KafkaClient::Global<T>::logger;
336-
337- template <typename T>
338- std::once_flag KafkaClient::Global<T>::initOnce;
339289
340290inline
341291KafkaClient::KafkaClient (ClientType clientType,
@@ -345,23 +295,20 @@ KafkaClient::KafkaClient(ClientType clientType,
345295 static const std::set<std::string> PRIVATE_PROPERTY_KEYS = { " max.poll.records" };
346296
347297 // Save clientID
348- if (auto clientId = properties.getProperty (CLIENT_ID))
298+ if (auto clientId = properties.getProperty (Config:: CLIENT_ID))
349299 {
350300 _clientId = *clientId;
351301 _clientName = getClientTypeString (clientType) + " [" + _clientId + " ]" ;
352302 }
353303
354- // Init global logger
355- std::call_once (Global<>::initOnce, [](){ Global<>::logger = DefaultLogger; });
356-
357304 // Log Callback
358305 if (properties.contains (" log_cb" ))
359306 {
360307 setLogCallback (properties.get <LogCallback>(" log_cb" ));
361308 }
362309
363310 // Save LogLevel
364- if (auto logLevel = properties.getProperty (LOG_LEVEL))
311+ if (auto logLevel = properties.getProperty (Config:: LOG_LEVEL))
365312 {
366313 try
367314 {
@@ -480,7 +427,7 @@ KafkaClient::KafkaClient(ClientType clientType,
480427 KAFKA_THROW_IF_WITH_ERROR (Error (rd_kafka_last_error ()));
481428
482429 // Add brokers
483- auto brokers = properties.getProperty (BOOTSTRAP_SERVERS);
430+ auto brokers = properties.getProperty (Config:: BOOTSTRAP_SERVERS);
484431 if (!brokers || rd_kafka_brokers_add (getClientHandle (), brokers->c_str ()) == 0 )
485432 {
486433 KAFKA_THROW_ERROR (Error (RD_KAFKA_RESP_ERR__INVALID_ARG,\
@@ -496,22 +443,22 @@ KafkaClient::validateAndReformProperties(const Properties& properties)
496443 auto newProperties = properties;
497444
498445 // BOOTSTRAP_SERVERS property is mandatory
499- if (!newProperties.getProperty (BOOTSTRAP_SERVERS))
446+ if (!newProperties.getProperty (Config:: BOOTSTRAP_SERVERS))
500447 {
501448 KAFKA_THROW_ERROR (Error (RD_KAFKA_RESP_ERR__INVALID_ARG,\
502- " Validation failed! With no property [" + std::string (BOOTSTRAP_SERVERS) + " ]" ));
449+ " Validation failed! With no property [" + std::string (Config:: BOOTSTRAP_SERVERS) + " ]" ));
503450 }
504451
505452 // If no "client.id" configured, generate a random one for user
506- if (!newProperties.getProperty (CLIENT_ID))
453+ if (!newProperties.getProperty (Config:: CLIENT_ID))
507454 {
508- newProperties.put (CLIENT_ID, utility::getRandomString ());
455+ newProperties.put (Config:: CLIENT_ID, utility::getRandomString ());
509456 }
510457
511458 // If no "log_level" configured, use Log::Level::Notice as default
512- if (!newProperties.getProperty (LOG_LEVEL))
459+ if (!newProperties.getProperty (Config:: LOG_LEVEL))
513460 {
514- newProperties.put (LOG_LEVEL, std::to_string (static_cast <int >(Log::Level::Notice)));
461+ newProperties.put (Config:: LOG_LEVEL, std::to_string (static_cast <int >(Log::Level::Notice)));
515462 }
516463
517464 return newProperties;
0 commit comments