diff --git a/dbms/programs/server/Server.cpp b/dbms/programs/server/Server.cpp index a6b361f90c2a9e45868364d733b3dcb440ae250e..0cd357bbd943528e0a434ad22790d5a71167e202 100644 --- a/dbms/programs/server/Server.cpp +++ b/dbms/programs/server/Server.cpp @@ -881,7 +881,11 @@ int Server::main(const std::vector & /*args*/) for (auto & server : servers) server->start(); - setTextLog(global_context->getTextLog()); + { + String level_str = config().getString("text_log.level", ""); + int level = level_str.empty() ? INT_MAX : Poco::Logger::parseLevel(level_str); + setTextLog(global_context->getTextLog(), level); + } buildLoggers(config(), logger()); main_config_reloader->start(); diff --git a/dbms/programs/server/config.xml b/dbms/programs/server/config.xml index e39a7c80657fbd239fc868d7d775eea6a0bcd48e..fec7ad9ef1b422f70b39aed1534d47d7f35c8946 100644 --- a/dbms/programs/server/config.xml +++ b/dbms/programs/server/config.xml @@ -389,10 +389,12 @@ diff --git a/libs/libloggers/loggers/Loggers.cpp b/libs/libloggers/loggers/Loggers.cpp index cf966f620e2fea41d4ef704801b941bd2e3a87d2..0fdaa766838c9a4e1c644e7f1a2ce752cda8e030 100644 --- a/libs/libloggers/loggers/Loggers.cpp +++ b/libs/libloggers/loggers/Loggers.cpp @@ -27,16 +27,17 @@ static std::string createDirectory(const std::string & file) return path.toString(); }; -void Loggers::setTextLog(std::shared_ptr log) +void Loggers::setTextLog(std::shared_ptr log, int max_priority) { text_log = log; + text_log_max_priority = max_priority; } void Loggers::buildLoggers(Poco::Util::AbstractConfiguration & config, Poco::Logger & logger /*_root*/, const std::string & cmd_name) { if (split) if (auto log = text_log.lock()) - split->addTextLog(log); + split->addTextLog(log, text_log_max_priority); auto current_logger = config.getString("logger", ""); if (config_logger == current_logger) diff --git a/libs/libloggers/loggers/Loggers.h b/libs/libloggers/loggers/Loggers.h index 525cab1e64954ef7562b6c2ff0ac5dd2afa0ffc1..0095516a7386de2befb418537e14ebe905a04e38 100644 --- a/libs/libloggers/loggers/Loggers.h +++ b/libs/libloggers/loggers/Loggers.h @@ -24,7 +24,7 @@ public: return layer; /// layer setted in inheritor class BaseDaemonApplication. } - void setTextLog(std::shared_ptr log); + void setTextLog(std::shared_ptr log, int max_priority); protected: std::optional layer; @@ -38,5 +38,7 @@ private: std::string config_logger; std::weak_ptr text_log; + int text_log_max_priority = -1; + Poco::AutoPtr split; }; diff --git a/libs/libloggers/loggers/OwnSplitChannel.cpp b/libs/libloggers/loggers/OwnSplitChannel.cpp index 467d7eb4fc2cdc9a2686b98d7edcd95cb8e6805b..3b9ded40dc30aca0fa4f5e62ef1dd4662a5461f3 100644 --- a/libs/libloggers/loggers/OwnSplitChannel.cpp +++ b/libs/libloggers/loggers/OwnSplitChannel.cpp @@ -70,34 +70,37 @@ void OwnSplitChannel::logSplit(const Poco::Message & msg) } - /// Also log to system.text_log table - TextLogElement elem; + /// Also log to system.text_log table, if message is not too noisy + if (text_log_max_priority && msg.getPriority() <= text_log_max_priority) + { + TextLogElement elem; - elem.event_time = msg_ext.time_seconds; - elem.microseconds = msg_ext.time_microseconds; + elem.event_time = msg_ext.time_seconds; + elem.microseconds = msg_ext.time_microseconds; - elem.thread_name = getThreadName(); - elem.thread_number = msg_ext.thread_number; + elem.thread_name = getThreadName(); + elem.thread_number = msg_ext.thread_number; - if (CurrentThread::isInitialized()) - elem.os_thread_id = CurrentThread::get().os_thread_id; - else - elem.os_thread_id = 0; + if (CurrentThread::isInitialized()) + elem.os_thread_id = CurrentThread::get().os_thread_id; + else + elem.os_thread_id = 0; - elem.query_id = msg_ext.query_id; + elem.query_id = msg_ext.query_id; - elem.message = msg.getText(); - elem.logger_name = msg.getSource(); - elem.level = msg.getPriority(); + elem.message = msg.getText(); + elem.logger_name = msg.getSource(); + elem.level = msg.getPriority(); - if (msg.getSourceFile() != nullptr) - elem.source_file = msg.getSourceFile(); + if (msg.getSourceFile() != nullptr) + elem.source_file = msg.getSourceFile(); - elem.source_line = msg.getSourceLine(); + elem.source_line = msg.getSourceLine(); - std::lock_guard lock(text_log_mutex); - if (auto log = text_log.lock()) - log->add(elem); + std::lock_guard lock(text_log_mutex); + if (auto log = text_log.lock()) + log->add(elem); + } } @@ -106,10 +109,11 @@ void OwnSplitChannel::addChannel(Poco::AutoPtr channel) channels.emplace_back(std::move(channel), dynamic_cast(channel.get())); } -void OwnSplitChannel::addTextLog(std::shared_ptr log) +void OwnSplitChannel::addTextLog(std::shared_ptr log, int max_priority) { std::lock_guard lock(text_log_mutex); text_log = log; + text_log_max_priority = max_priority; } } diff --git a/libs/libloggers/loggers/OwnSplitChannel.h b/libs/libloggers/loggers/OwnSplitChannel.h index f475b46a72e4adc5db22c3c4e8d61d32736e0e68..78308e97ab7582002538e346f0e176c8abf81038 100644 --- a/libs/libloggers/loggers/OwnSplitChannel.h +++ b/libs/libloggers/loggers/OwnSplitChannel.h @@ -20,7 +20,7 @@ public: /// Adds a child channel void addChannel(Poco::AutoPtr channel); - void addTextLog(std::shared_ptr log); + void addTextLog(std::shared_ptr log, int max_priority); private: void logSplit(const Poco::Message & msg); @@ -33,6 +33,7 @@ private: std::mutex text_log_mutex; std::weak_ptr text_log; + int text_log_max_priority = -1; }; }