/******************************************************************************** * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH * * * * This software is distributed under the terms of the * * GNU Lesser General Public Licence version 3 (LGPL) version 3, * * copied verbatim in the file "LICENSE" * ********************************************************************************/ /* * File: logger_def.h * Author: winckler * * Created on September 2, 2015, 11:58 AM */ #ifndef LOGGER_DEF_H #define LOGGER_DEF_H #include #include #include #include #include namespace fairmq { enum severity_level { TRACE, DEBUG, RESULTS, INFO, WARN, ERROR, STATE, NOLOG }; static const std::array g_LogSeverityLevelString { { "TRACE", "DEBUG", "RESULTS", "INFO", "WARN", "ERROR", "STATE", "NOLOG" } }; namespace color { enum code { FG_BLACK = 30, FG_RED = 31, FG_GREEN = 32, FG_YELLOW = 33, FG_BLUE = 34, FG_MAGENTA = 35, FG_CYAN = 36, FG_WHITE = 37, FG_DEFAULT = 39, BG_RED = 41, BG_GREEN = 42, BG_BLUE = 44, BG_DEFAULT = 49 }; } } // helper function to format in color console output template inline std::string write_in(const std::string& text_in_bold) { std::ostringstream os; os << "\033[01;" << color << "m" << text_in_bold << "\033[0m"; return os.str(); } // typedef typedef fairmq::severity_level custom_severity_level; #define SEVERITY_THRESHOLD custom_severity_level::TRACE // tags used for log console or file formatting struct tag_console; struct tag_file; // overload operator for console output inline boost::log::formatting_ostream& operator<< ( boost::log::formatting_ostream& strm, boost::log::to_log_manip< custom_severity_level, tag_console > const& manip ) { custom_severity_level level = manip.get(); std::size_t idx=static_cast< std::size_t >(level); if ( idx < fairmq::g_LogSeverityLevelString.size() ) { //strm <<" idx = "<(fairmq::g_LogSeverityLevelString.at(idx)); break; case custom_severity_level::DEBUG : strm << write_in(fairmq::g_LogSeverityLevelString.at(idx)); break; case custom_severity_level::RESULTS : strm << write_in(fairmq::g_LogSeverityLevelString.at(idx)); break; case custom_severity_level::INFO : strm << write_in(fairmq::g_LogSeverityLevelString.at(idx)); break; case custom_severity_level::WARN : strm << write_in(fairmq::g_LogSeverityLevelString.at(idx)); break; case custom_severity_level::STATE : strm << write_in(fairmq::g_LogSeverityLevelString.at(idx)); break; case custom_severity_level::ERROR : strm << write_in(fairmq::g_LogSeverityLevelString.at(idx)); break; case custom_severity_level::NOLOG : strm << write_in(fairmq::g_LogSeverityLevelString.at(idx)); break; default: break; } } else { strm << write_in("Unknown log level ") << "(int level = "<(level) <<")"; } return strm; } // overload operator for file output inline boost::log::formatting_ostream& operator<< ( boost::log::formatting_ostream& strm, boost::log::to_log_manip< custom_severity_level, tag_file > const& manip ) { custom_severity_level level = manip.get(); std::size_t idx=static_cast< std::size_t >(level); if ( idx < fairmq::g_LogSeverityLevelString.size() ) strm << fairmq::g_LogSeverityLevelString.at(idx); else { strm << write_in("Unknown log level ") << "(int level = "<(level) <<")"; } return strm; } #endif /* LOGGER_DEF_H */