Commit 4c2a3a6f authored by Matthias Vallentin's avatar Matthias Vallentin

Add component filter to console logger

parent 785cb3bd
...@@ -257,6 +257,7 @@ public: ...@@ -257,6 +257,7 @@ public:
std::string logger_filename; std::string logger_filename;
atom_value logger_verbosity; atom_value logger_verbosity;
atom_value logger_console; atom_value logger_console;
std::string logger_filter;
// -- config parameters of the middleman ------------------------------------- // -- config parameters of the middleman -------------------------------------
......
...@@ -65,9 +65,11 @@ public: ...@@ -65,9 +65,11 @@ public:
event* next; event* next;
event* prev; event* prev;
int level; int level;
const char* component;
std::string prefix; std::string prefix;
std::string msg; std::string msg;
explicit event(int l = 0, std::string p = "", std::string m = ""); explicit event(int l = 0, char const* c = "", std::string p = "",
std::string m = "");
}; };
template <class T> template <class T>
......
...@@ -137,7 +137,9 @@ actor_system_config::actor_system_config() ...@@ -137,7 +137,9 @@ actor_system_config::actor_system_config()
.add(logger_verbosity, "verbosity", .add(logger_verbosity, "verbosity",
"sets the verbosity (QUIET|ERROR|WARNING|INFO|DEBUG|TRACE)") "sets the verbosity (QUIET|ERROR|WARNING|INFO|DEBUG|TRACE)")
.add(logger_console, "console", .add(logger_console, "console",
"enables logging to the console via std::clog"); "enables logging to the console via std::clog")
.add(logger_filter, "filter",
"sets a component filter for console log messages");
opt_group{options_, "middleman"} opt_group{options_, "middleman"}
.add(middleman_network_backend, "network-backend", .add(middleman_network_backend, "network-backend",
"sets the network backend to either 'default' or 'asio' (if available)") "sets the network backend to either 'default' or 'asio' (if available)")
......
...@@ -125,10 +125,11 @@ void prettify_type_name(std::string& class_name, const char* c_class_name) { ...@@ -125,10 +125,11 @@ void prettify_type_name(std::string& class_name, const char* c_class_name) {
} // namespace <anonymous> } // namespace <anonymous>
logger::event::event(int l, std::string p, std::string m) logger::event::event(int l, const char* c, std::string p, std::string m)
: next(nullptr), : next(nullptr),
prev(nullptr), prev(nullptr),
level(l), level(l),
component(c),
prefix(std::move(p)), prefix(std::move(p)),
msg(std::move(m)) { msg(std::move(m)) {
// nop // nop
...@@ -248,7 +249,7 @@ void logger::log(int level, const char* component, ...@@ -248,7 +249,7 @@ void logger::log(int level, const char* component,
<< " " << class_name << " " << function_name << " " << class_name << " " << function_name
<< " " << file_name << ":" << line_num; << " " << file_name << ":" << line_num;
queue_.synchronized_enqueue(queue_mtx_, queue_cv_, queue_.synchronized_enqueue(queue_mtx_, queue_cv_,
new event{level, prefix.str(), msg}); new event{level, component, prefix.str(), msg});
} }
void logger::set_current_actor_system(actor_system* x) { void logger::set_current_actor_system(actor_system* x) {
...@@ -298,7 +299,7 @@ void logger::run() { ...@@ -298,7 +299,7 @@ void logger::run() {
auto nid = to_string(system_.node()); auto nid = to_string(system_.node());
f.replace(i, i + sizeof(node) - 1, nid); f.replace(i, i + sizeof(node) - 1, nid);
} }
std::fstream out(f, std::ios::out | std::ios::app); std::fstream file(f, std::ios::out | std::ios::app);
std::unique_ptr<event> ptr; std::unique_ptr<event> ptr;
for (;;) { for (;;) {
// make sure we have data to read // make sure we have data to read
...@@ -307,10 +308,14 @@ void logger::run() { ...@@ -307,10 +308,14 @@ void logger::run() {
ptr.reset(queue_.try_pop()); ptr.reset(queue_.try_pop());
CAF_ASSERT(ptr != nullptr); CAF_ASSERT(ptr != nullptr);
if (ptr->msg.empty()) { if (ptr->msg.empty()) {
out.close(); file.close();
return; return;
} }
out << ptr->prefix << ' ' << ptr->msg << std::endl; file << ptr->prefix << ' ' << ptr->msg << std::endl;
// TODO: once we've phased out GCC 4.8, we can upgarde this to a regex.
if (!system_.config().logger_filter.empty()
&& ptr->component != system_.config().logger_filter)
continue;
if (system_.config().logger_console == atom("UNCOLORED")) { if (system_.config().logger_console == atom("UNCOLORED")) {
std::clog << ptr->msg << std::endl; std::clog << ptr->msg << std::endl;
} else if (system_.config().logger_console == atom("COLORED")) { } else if (system_.config().logger_console == atom("COLORED")) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment