You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
2.2 KiB
63 lines
2.2 KiB
7 years ago
|
#ifndef AIRMAP_LOGGER_H_
|
||
|
#define AIRMAP_LOGGER_H_
|
||
|
|
||
|
#include <airmap/do_not_copy_or_move.h>
|
||
|
|
||
|
#include <iostream>
|
||
|
#include <memory>
|
||
|
|
||
|
namespace airmap {
|
||
|
|
||
|
/// Logger abstracts logging of human-readable message
|
||
|
/// providing details on the operation of the system.
|
||
|
class Logger : DoNotCopyOrMove {
|
||
|
public:
|
||
|
/// Severity enumerates all known levels of severity
|
||
|
enum class Severity { debug = 0, info = 1, error = 2 };
|
||
|
|
||
|
/// debug logs a message from component with Severity::debug.
|
||
|
void debug(const char* message, const char* component);
|
||
|
|
||
|
/// info logs a message from component with Severity::info.
|
||
|
void info(const char* message, const char* component);
|
||
|
|
||
|
/// error logs a message from component with Severity::error.
|
||
|
void error(const char* message, const char* component);
|
||
|
|
||
|
/// log handles the incoming log message originating from component.
|
||
|
/// Implementation should handle the case of component being a nullptr
|
||
|
/// gracefully.
|
||
|
virtual void log(Severity severity, const char* message, const char* component) = 0;
|
||
|
|
||
|
/// should_log should return true if 'message' with 'severity' originating from
|
||
|
/// 'component' should be logged.
|
||
|
///
|
||
|
/// Implementations should handle the case of either message or component being nullptr
|
||
|
/// gracefully.
|
||
|
virtual bool should_log(Severity severity, const char* message, const char* component) = 0;
|
||
|
|
||
|
protected:
|
||
|
Logger() = default;
|
||
|
};
|
||
|
|
||
|
/// operator< returns true iff the numeric value of lhs < rhs.
|
||
|
bool operator<(Logger::Severity lhs, Logger::Severity rhs);
|
||
|
|
||
|
/// operator>> parses severity from in.
|
||
|
std::istream& operator>>(std::istream& in, Logger::Severity& severity);
|
||
|
|
||
|
/// create_default_logger returns a Logger implementation writing
|
||
|
/// log messages to 'out'.
|
||
|
std::shared_ptr<Logger> create_default_logger(std::ostream& out = std::cerr);
|
||
|
|
||
|
/// create_filtering_logger returns a logger that filters out log entries
|
||
|
/// with a severity smaller than the configurated severity.
|
||
|
std::shared_ptr<Logger> create_filtering_logger(Logger::Severity severity, const std::shared_ptr<Logger>& logger);
|
||
|
|
||
|
/// create_null_logger returns a logger that does the equivalent of
|
||
|
/// > /dev/null.
|
||
|
std::shared_ptr<Logger> create_null_logger();
|
||
|
|
||
|
} // namespace airmap
|
||
|
|
||
|
#endif // AIRMAP_LOGGER_H_
|