refactor(logger): Restrict trace logs to debug builds
This commit is contained in:
parent
4bed34156e
commit
4d444da0e4
@ -21,7 +21,11 @@
|
||||
#define log_warning(s) get_logger()->warning(s)
|
||||
#define log_info(s) get_logger()->info(s)
|
||||
#define log_debug(s) get_logger()->debug(s)
|
||||
#ifdef DEBUG
|
||||
#define log_trace(s) get_logger()->trace(__FILE__, __FUNCTION__, __LINE__, s)
|
||||
#else
|
||||
#define log_trace(s) if (0) {}
|
||||
#endif
|
||||
|
||||
enum LogLevel
|
||||
{
|
||||
@ -31,7 +35,11 @@ enum LogLevel
|
||||
LEVEL_INFO = 1 << 4,
|
||||
LEVEL_DEBUG = 1 << 8,
|
||||
LEVEL_TRACE = 1 << 16,
|
||||
#ifdef DEBUG
|
||||
LEVEL_ALL = LEVEL_ERROR | LEVEL_WARNING | LEVEL_INFO | LEVEL_DEBUG | LEVEL_TRACE
|
||||
#else
|
||||
LEVEL_ALL = LEVEL_ERROR | LEVEL_WARNING | LEVEL_INFO | LEVEL_DEBUG
|
||||
#endif
|
||||
};
|
||||
|
||||
class Logger
|
||||
@ -41,24 +49,27 @@ class Logger
|
||||
int level = LogLevel::LEVEL_ERROR | LogLevel::LEVEL_WARNING | LogLevel::LEVEL_INFO;
|
||||
int fd = LOGGER_FD;
|
||||
|
||||
void output(std::string tag, std::string msg);
|
||||
|
||||
public:
|
||||
Logger();
|
||||
|
||||
// void set_level(int level);
|
||||
void set_level(int level);
|
||||
void add_level(int level);
|
||||
|
||||
void fatal(const std::string& msg);
|
||||
void error(const std::string& msg);
|
||||
void warning(const std::string& msg);
|
||||
void info(const std::string& msg);
|
||||
void debug(const std::string& msg);
|
||||
void trace(const char *file, const char *fn, int lineno, const std::string& msg);
|
||||
void fatal(std::string msg);
|
||||
void error(std::string msg);
|
||||
void warning(std::string msg);
|
||||
void info(std::string msg);
|
||||
void debug(std::string msg);
|
||||
|
||||
void fatal(int msg) { fatal(std::to_string(msg)); }
|
||||
void error(int msg) { error(std::to_string(msg)); }
|
||||
void warning(int msg) { warning(std::to_string(msg)); }
|
||||
void info(int msg) { info(std::to_string(msg)); }
|
||||
void debug(int msg) { debug(std::to_string(msg)); }
|
||||
|
||||
void trace(const char *file, const char *fn, int lineno, std::string msg);
|
||||
void trace(const char *file, const char *fn, int lineno, int msg) {
|
||||
trace(file, fn, lineno, std::to_string(msg));
|
||||
}
|
||||
|
@ -56,7 +56,7 @@ int main(int argc, char **argv)
|
||||
cli::add_option("-h", "--help", "Show help options");
|
||||
cli::add_option("-c", "--config", "FILE", "Path to the configuration file");
|
||||
cli::add_option("-p", "--pipe", "FILE", "Path to the input pipe");
|
||||
cli::add_option("-l", "--log", "LEVEL", "Set the logging verbosity", {"info","debug","trace"});
|
||||
cli::add_option("-l", "--log", "LEVEL", "Set the logging verbosity", {"warning","info","debug","trace"});
|
||||
cli::add_option("-d", "--dump", "PARAM", "Show value of PARAM in section [bar_name]");
|
||||
cli::add_option("-x", "--print-exec", "Print the generated command line string used to start the lemonbar process");
|
||||
cli::add_option("-w", "--print-wmname", "Print the generated WM_NAME");
|
||||
@ -74,12 +74,20 @@ int main(int argc, char **argv)
|
||||
* Set logging verbosity
|
||||
*/
|
||||
if (cli::has_option("log")) {
|
||||
if (cli::match_option_value("log", "info"))
|
||||
logger->add_level(LogLevel::LEVEL_INFO);
|
||||
logger->set_level(LogLevel::LEVEL_ERROR);
|
||||
|
||||
if (cli::match_option_value("log", "warning"))
|
||||
logger->set_level(LogLevel::LEVEL_WARNING);
|
||||
else if (cli::match_option_value("log", "info"))
|
||||
logger->add_level(LogLevel::LEVEL_WARNING | LogLevel::LEVEL_INFO);
|
||||
else if (cli::match_option_value("log", "debug"))
|
||||
logger->add_level(LogLevel::LEVEL_INFO | LogLevel::LEVEL_DEBUG);
|
||||
else if (cli::match_option_value("log", "trace"))
|
||||
logger->add_level(LogLevel::LEVEL_INFO | LogLevel::LEVEL_DEBUG | LogLevel::LEVEL_TRACE);
|
||||
logger->add_level(LogLevel::LEVEL_WARNING | LogLevel::LEVEL_INFO | LogLevel::LEVEL_DEBUG);
|
||||
else if (cli::match_option_value("log", "trace")) {
|
||||
logger->add_level(LogLevel::LEVEL_WARNING | LogLevel::LEVEL_INFO | LogLevel::LEVEL_DEBUG);
|
||||
#ifdef DEBUG
|
||||
logger->add_level(LogLevel::LEVEL_TRACE);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -16,55 +16,62 @@ std::shared_ptr<Logger> &get_logger()
|
||||
|
||||
Logger::Logger()
|
||||
{
|
||||
if (isatty(LOGGER_FD)) {
|
||||
if (isatty(LOGGER_FD))
|
||||
dup2(LOGGER_FD, this->fd);
|
||||
}
|
||||
}
|
||||
|
||||
// void Logger::set_level(int mask)
|
||||
// {
|
||||
// this->level = mask;
|
||||
// }
|
||||
void Logger::set_level(int mask) {
|
||||
this->level = mask;
|
||||
}
|
||||
|
||||
void Logger::add_level(int mask)
|
||||
{
|
||||
void Logger::add_level(int mask) {
|
||||
this->level |= mask;
|
||||
}
|
||||
|
||||
void Logger::fatal(const std::string& msg)
|
||||
void Logger::output(std::string tag, std::string msg) {
|
||||
dprintf(this->fd, "%s%s\n", tag.c_str(), msg.c_str());
|
||||
}
|
||||
|
||||
void Logger::fatal(std::string msg)
|
||||
{
|
||||
dprintf(this->fd, "%s%s\n", LOGGER_TAG_FATAL, msg.c_str());
|
||||
this->output(LOGGER_TAG_FATAL, msg);
|
||||
std::exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
void Logger::error(const std::string& msg)
|
||||
void Logger::error(std::string msg)
|
||||
{
|
||||
if (this->level & LogLevel::LEVEL_ERROR)
|
||||
dprintf(this->fd, "%s%s\n", LOGGER_TAG_ERR, msg.c_str());
|
||||
this->output(LOGGER_TAG_ERR, msg);
|
||||
}
|
||||
|
||||
void Logger::warning(const std::string& msg)
|
||||
void Logger::warning(std::string msg)
|
||||
{
|
||||
if (this->level & LogLevel::LEVEL_WARNING)
|
||||
dprintf(this->fd, "%s%s\n", LOGGER_TAG_WARN, msg.c_str());
|
||||
this->output(LOGGER_TAG_WARN, msg);
|
||||
}
|
||||
|
||||
void Logger::info(const std::string& msg)
|
||||
void Logger::info(std::string msg)
|
||||
{
|
||||
if (this->level & LogLevel::LEVEL_INFO)
|
||||
dprintf(this->fd, "%s%s\n", LOGGER_TAG_INFO, msg.c_str());
|
||||
this->output(LOGGER_TAG_INFO, msg);
|
||||
}
|
||||
|
||||
void Logger::debug(const std::string& msg)
|
||||
void Logger::debug(std::string msg)
|
||||
{
|
||||
if (this->level & LogLevel::LEVEL_DEBUG)
|
||||
dprintf(this->fd, "%s%s\n", LOGGER_TAG_DEBUG, msg.c_str());
|
||||
this->output(LOGGER_TAG_DEBUG, msg);
|
||||
}
|
||||
|
||||
void Logger::trace(const char *file, const char *fn, int lineno, const std::string& msg)
|
||||
void Logger::trace(const char *file, const char *fn, int lineno, std::string msg)
|
||||
{
|
||||
if (this->level & LogLevel::LEVEL_TRACE && !msg.empty())
|
||||
dprintf(this->fd, "%s%s (%s:%d) -> %s\n", LOGGER_TAG_TRACE, &file[0], fn, lineno, msg.c_str());
|
||||
else if (msg.empty())
|
||||
dprintf(this->fd, "%s%s (%s:%d)\n", LOGGER_TAG_TRACE, &file[0], fn, lineno);
|
||||
#ifdef DEBUG
|
||||
if (!(this->level & LogLevel::LEVEL_TRACE))
|
||||
return;
|
||||
char trace_msg[1024];
|
||||
if (!msg.empty())
|
||||
sprintf(trace_msg, "%s (%s:%d) -> %s", &file[0], fn, lineno, msg.c_str());
|
||||
else
|
||||
sprintf(trace_msg, "%s (%s:%d)", &file[0], fn, lineno);
|
||||
this->output(LOGGER_TAG_TRACE, trace_msg);
|
||||
#endif
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user