Implemented command-line option for setting the output log priority.
This commit is contained in:
parent
5816207af7
commit
a0cf6e21e4
28
app/main.cpp
28
app/main.cpp
@ -16,7 +16,8 @@ int main(int argc, char **argv)
|
|||||||
("help,h", "Display this help message")
|
("help,h", "Display this help message")
|
||||||
("version,v", "Display version information")
|
("version,v", "Display version information")
|
||||||
("input,i", po::value<std::vector<std::string>>(), "Input files")
|
("input,i", po::value<std::vector<std::string>>(), "Input files")
|
||||||
("color", po::value<std::string>()->default_value("auto"), "Whether to colorize the output (always, never, or auto).");
|
("color,c", po::value<std::string>()->default_value("auto"), "Colorize the output (always, never, or auto).")
|
||||||
|
("log-priority,p", po::value<std::string>()->default_value("warning"), "Log messages starting from this priority (debug, info, warning, or error).");
|
||||||
|
|
||||||
po::positional_options_description positionalOptionsDescription;
|
po::positional_options_description positionalOptionsDescription;
|
||||||
positionalOptionsDescription.add("input", -1);
|
positionalOptionsDescription.add("input", -1);
|
||||||
@ -60,17 +61,32 @@ int main(int argc, char **argv)
|
|||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto colorPolicy = variablesMap["color"].as<std::string>();
|
const auto colorPolicyString = variablesMap["color"].as<std::string>();
|
||||||
|
|
||||||
if (colorPolicy == "auto")
|
if (colorPolicyString == "auto")
|
||||||
context.logger.setColorPolicy(anthem::output::ColorStream::ColorPolicy::Auto);
|
context.logger.setColorPolicy(anthem::output::ColorStream::ColorPolicy::Auto);
|
||||||
else if (colorPolicy == "never")
|
else if (colorPolicyString == "never")
|
||||||
context.logger.setColorPolicy(anthem::output::ColorStream::ColorPolicy::Never);
|
context.logger.setColorPolicy(anthem::output::ColorStream::ColorPolicy::Never);
|
||||||
else if (colorPolicy == "always")
|
else if (colorPolicyString == "always")
|
||||||
context.logger.setColorPolicy(anthem::output::ColorStream::ColorPolicy::Always);
|
context.logger.setColorPolicy(anthem::output::ColorStream::ColorPolicy::Always);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
context.logger.log(anthem::output::Priority::Error, ("unknown color policy “" + colorPolicy + "”").c_str());
|
context.logger.log(anthem::output::Priority::Error, ("unknown color policy “" + colorPolicyString + "”").c_str());
|
||||||
|
context.logger.errorStream() << std::endl;
|
||||||
|
printHelp();
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto logPriorityString = variablesMap["log-priority"].as<std::string>();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
const auto logPriority = anthem::output::priorityFromName(logPriorityString.c_str());
|
||||||
|
context.logger.setLogPriority(logPriority);
|
||||||
|
}
|
||||||
|
catch (const std::exception &e)
|
||||||
|
{
|
||||||
|
context.logger.log(anthem::output::Priority::Error, ("unknown log priorty “" + logPriorityString + "”").c_str());
|
||||||
context.logger.errorStream() << std::endl;
|
context.logger.errorStream() << std::endl;
|
||||||
printHelp();
|
printHelp();
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
@ -29,7 +29,7 @@ class Logger
|
|||||||
ColorStream &errorStream();
|
ColorStream &errorStream();
|
||||||
|
|
||||||
// The level from which on messages should be printed
|
// The level from which on messages should be printed
|
||||||
void setOutputPriority(Priority outputLevel);
|
void setLogPriority(Priority logPriority);
|
||||||
void setColorPolicy(ColorStream::ColorPolicy colorPolicy);
|
void setColorPolicy(ColorStream::ColorPolicy colorPolicy);
|
||||||
|
|
||||||
void log(Priority priority, const char *message);
|
void log(Priority priority, const char *message);
|
||||||
@ -39,7 +39,7 @@ class Logger
|
|||||||
ColorStream m_outputStream;
|
ColorStream m_outputStream;
|
||||||
ColorStream m_errorStream;
|
ColorStream m_errorStream;
|
||||||
|
|
||||||
Priority m_outputPriority;
|
Priority m_logPriority;
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
#ifndef __ANTHEM__OUTPUT__PRIORITY_H
|
#ifndef __ANTHEM__OUTPUT__PRIORITY_H
|
||||||
#define __ANTHEM__OUTPUT__PRIORITY_H
|
#define __ANTHEM__OUTPUT__PRIORITY_H
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
|
#include <exception>
|
||||||
|
|
||||||
namespace anthem
|
namespace anthem
|
||||||
{
|
{
|
||||||
namespace output
|
namespace output
|
||||||
@ -22,6 +25,41 @@ enum class Priority
|
|||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
inline constexpr const char *priorityName(Priority priority)
|
||||||
|
{
|
||||||
|
switch (priority)
|
||||||
|
{
|
||||||
|
case Priority::Debug:
|
||||||
|
return "debug";
|
||||||
|
case Priority::Info:
|
||||||
|
return "info";
|
||||||
|
case Priority::Warning:
|
||||||
|
return "warning";
|
||||||
|
case Priority::Error:
|
||||||
|
return "error";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "unknown";
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
inline Priority priorityFromName(const char *priorityName)
|
||||||
|
{
|
||||||
|
if (std::strcmp(priorityName, "debug") == 0)
|
||||||
|
return Priority::Debug;
|
||||||
|
if (std::strcmp(priorityName, "info") == 0)
|
||||||
|
return Priority::Info;
|
||||||
|
if (std::strcmp(priorityName, "warning") == 0)
|
||||||
|
return Priority::Warning;
|
||||||
|
if (std::strcmp(priorityName, "error") == 0)
|
||||||
|
return Priority::Error;
|
||||||
|
|
||||||
|
throw std::runtime_error("unknown log priority");
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ constexpr Format priorityFormat(Priority priority)
|
|||||||
case Priority::Debug:
|
case Priority::Debug:
|
||||||
return {Color::Green, FontWeight::Bold};
|
return {Color::Green, FontWeight::Bold};
|
||||||
case Priority::Info:
|
case Priority::Info:
|
||||||
return {Color::Cyan, FontWeight::Bold};
|
return {Color::Blue, FontWeight::Bold};
|
||||||
case Priority::Warning:
|
case Priority::Warning:
|
||||||
return {Color::Magenta, FontWeight::Bold};
|
return {Color::Magenta, FontWeight::Bold};
|
||||||
case Priority::Error:
|
case Priority::Error:
|
||||||
@ -32,25 +32,6 @@ constexpr Format priorityFormat(Priority priority)
|
|||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
constexpr const char *priorityName(Priority priority)
|
|
||||||
{
|
|
||||||
switch (priority)
|
|
||||||
{
|
|
||||||
case Priority::Debug:
|
|
||||||
return "debug";
|
|
||||||
case Priority::Info:
|
|
||||||
return "info";
|
|
||||||
case Priority::Warning:
|
|
||||||
return "warning";
|
|
||||||
case Priority::Error:
|
|
||||||
return "error";
|
|
||||||
}
|
|
||||||
|
|
||||||
return "message";
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
constexpr const Format MessageBodyFormat = {Color::White, FontWeight::Bold};
|
constexpr const Format MessageBodyFormat = {Color::White, FontWeight::Bold};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -76,7 +57,7 @@ Logger::Logger(ColorStream &&outputStream)
|
|||||||
Logger::Logger(ColorStream &&outputStream, ColorStream &&errorStream)
|
Logger::Logger(ColorStream &&outputStream, ColorStream &&errorStream)
|
||||||
: m_outputStream{outputStream},
|
: m_outputStream{outputStream},
|
||||||
m_errorStream{errorStream},
|
m_errorStream{errorStream},
|
||||||
m_outputPriority{Priority::Warning}
|
m_logPriority{Priority::Warning}
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,9 +77,9 @@ ColorStream &Logger::errorStream()
|
|||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void Logger::setOutputPriority(Priority outputPriority)
|
void Logger::setLogPriority(Priority logPriority)
|
||||||
{
|
{
|
||||||
m_outputPriority = outputPriority;
|
m_logPriority = logPriority;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -115,7 +96,7 @@ void Logger::log(Priority priority, const char *message)
|
|||||||
{
|
{
|
||||||
const auto priorityID = static_cast<int>(priority);
|
const auto priorityID = static_cast<int>(priority);
|
||||||
|
|
||||||
if (priorityID < static_cast<int>(m_outputPriority))
|
if (priorityID < static_cast<int>(m_logPriority))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_outputStream
|
m_outputStream
|
||||||
@ -131,7 +112,7 @@ void Logger::log(Priority priority, const input::Location &location, const char
|
|||||||
{
|
{
|
||||||
const auto priorityID = static_cast<int>(priority);
|
const auto priorityID = static_cast<int>(priority);
|
||||||
|
|
||||||
if (priorityID < static_cast<int>(m_outputPriority))
|
if (priorityID < static_cast<int>(m_logPriority))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto &stream =
|
auto &stream =
|
||||||
|
Loading…
Reference in New Issue
Block a user