From 6a73cf238155395ce21e4a5bc5f8ef7dac8b086f Mon Sep 17 00:00:00 2001 From: Azat Khuzhin Date: Thu, 23 Jan 2020 23:19:51 +0300 Subject: [PATCH] Add text_log.level to limit entries that goes to system.text_log table v2: use INT_MAX as default (since 0 is none) --- dbms/programs/server/Server.cpp | 6 ++- dbms/programs/server/config.xml | 2 + libs/libloggers/loggers/Loggers.cpp | 5 ++- libs/libloggers/loggers/Loggers.h | 4 +- libs/libloggers/loggers/OwnSplitChannel.cpp | 46 +++++++++++---------- libs/libloggers/loggers/OwnSplitChannel.h | 3 +- 6 files changed, 40 insertions(+), 26 deletions(-) diff --git a/dbms/programs/server/Server.cpp b/dbms/programs/server/Server.cpp index a6b361f90c..0cd357bbd9 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 e39a7c8065..fec7ad9ef1 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 cf966f620e..0fdaa76683 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 525cab1e64..0095516a73 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 467d7eb4fc..3b9ded40dc 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 f475b46a72..78308e97ab 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; }; } -- GitLab