#include "luci/Log.h"
+#include <luci/UserSettings.h>
+
#include <cassert>
#include <cstdlib>
#include <iostream>
return (s == nullptr) ? value : (std::stoi(s) != 0);
}
+template <> int safecast<int>(const char *s, const int &value)
+{
+ return (s == nullptr) ? value : std::stoi(s);
+}
+
} // namespace
//
LoggerConfig::LoggerConfig()
{
- // Turn on logging if LUCI_LOG is set as non-zero value
- _enabled = safecast<bool>(std::getenv("LUCI_LOG"), false);
+ auto settings = luci::UserSettings::settings();
+
+ _show_warn = !settings->get(luci::UserSettings::Key::MuteWarnings);
+
+ // Turn on info logging if LUCI_LOG is set as non-zero value
+ _show_info = safecast<bool>(std::getenv("LUCI_LOG"), false);
+
+ // Turn on verbose logging if LUCI_LOG is set to some level
+ // VERBOSE(l, 1) will be visible with LUCI_LOG=2 and VERBOSE(l, 2) with LUCI_LOG=3 and so on
+ _show_verbose = safecast<int>(std::getenv("LUCI_LOG"), 0);
}
void LoggerConfig::configure(const hermes::Source *source, hermes::Source::Setting &setting) const
void LoggerConfig::configure(const Logger *, hermes::Source::Setting &setting) const
{
- if (_enabled)
+ setting.filter(hermes::SeverityCategory::FATAL).reject_all();
+ setting.filter(hermes::SeverityCategory::ERROR).reject_all();
+ setting.filter(hermes::SeverityCategory::WARN).reject_all();
+ setting.filter(hermes::SeverityCategory::INFO).reject_all();
+ setting.filter(hermes::SeverityCategory::VERBOSE).reject_all();
+
+ // TODO enable FATAL and ERROR
+ if (_show_warn)
+ {
+ setting.filter(hermes::SeverityCategory::WARN).accept_all();
+ }
+ if (_show_info)
{
- // Enable all catagories
- setting.accept_all();
+ setting.filter(hermes::SeverityCategory::INFO).accept_all();
}
- else
+ if (_show_verbose)
{
- // Disable all catagories
- setting.reject_all();
+ setting.filter(hermes::SeverityCategory::VERBOSE).accept_upto(_show_verbose);
}
}