#include <Logging.hh>
Public Types | |
enum | Level { TRACE = 0, DEBUG = 10, INFO = 20, WARN = 30, WARNING = 30, ERROR = 40, CRITICAL = 50, ALWAYS = 50 } |
Log priority levels. More... | |
typedef std::map< std::string, Log * > | LogMap |
Typedef for a collection of named logs. | |
typedef std::map< std::string, int > | LevelMap |
Typedef for a collection of named log levels. | |
typedef std::map< int, std::string > | ColorCodes |
Typedef for a collection of shell color codes, accessed by log level. | |
Public Member Functions | |
int | getLevel () const |
Get the priority level of this logger. | |
Log & | setLevel (int level) |
Set the priority level of this logger. | |
std::string | getName () const |
Get the name of this logger. | |
Log & | setName (const std::string &name) |
Set the name of this logger. | |
bool | isActive (int level) const |
Will this log level produce output on this logger at the moment? | |
Explicit log methods | |
void | trace (const std::string &message) |
void | debug (const std::string &message) |
void | info (const std::string &message) |
void | warn (const std::string &message) |
void | error (const std::string &message) |
Static Public Member Functions | |
static void | setLevel (const std::string &name, int level) |
Set the log levels. | |
static void | setLevels (const LevelMap &logLevels) |
static void | setShowTimestamp (bool showTime=true) |
static void | setShowLevel (bool showLevel=true) |
static void | setShowLoggerName (bool showName=true) |
static void | setUseColors (bool useColors=true) |
static Log & | getLog (const std::string &name) |
static Level | getLevelFromName (const std::string &level) |
Get a log level enum from a string. | |
static std::string | getLevelName (int level) |
Get the std::string representation of a log level. | |
Public Attributes | |
std::ostream *const | _nostream |
Protected Member Functions | |
void | log (int level, const std::string &message) |
Write a message at a particular level. | |
std::string | formatMessage (int level, const std::string &message) |
Turn a message string into the current log format. | |
Hidden constructors etc. | |
Log (const std::string &name) | |
Constructor 1. | |
Log (const std::string &name, int level) | |
Constructor 2. | |
Static Protected Member Functions | |
static std::string | getColorCode (int level) |
Private Attributes | |
std::string | _name |
This logger's name. | |
int | _level |
Threshold level for this logger. | |
Static Private Attributes | |
static LogMap | existingLogs |
A static map of existing logs: we don't make more loggers than necessary. | |
static LevelMap | defaultLevels |
A static map of default log levels. | |
static ColorCodes | colorCodes |
A static map of shell color codes for the log levels. | |
static std::string | endColorCode |
Shell color code for the end of the log levels. | |
static bool | showTimestamp = false |
Show timestamp? | |
static bool | showLogLevel = true |
Show log level? | |
static bool | showLoggerName = true |
Show logger name? | |
static bool | useShellColors = true |
Use shell colour escape codes? | |
Friends | |
std::ostream & | operator<< (Log &log, int level) |
The streaming operator can use Log's internals. |
Definition at line 9 of file Logging.hh.
typedef std::map<int, std::string> ColorCodes |
Typedef for a collection of shell color codes, accessed by log level.
Definition at line 24 of file Logging.hh.
typedef std::map<std::string, int> LevelMap |
Typedef for a collection of named log levels.
Definition at line 21 of file Logging.hh.
Typedef for a collection of named logs.
Definition at line 18 of file Logging.hh.
enum Level |
Log | ( | const std::string & | name | ) | [protected] |
Log | ( | const std::string & | name, | |
int | level | |||
) | [protected] |
Constructor 2.
Definition at line 23 of file Logging.cc.
void debug | ( | const std::string & | message | ) | [inline] |
Definition at line 131 of file Logging.hh.
References Log::DEBUG, and Log::log().
void error | ( | const std::string & | message | ) | [inline] |
Definition at line 137 of file Logging.hh.
References Log::ERROR, and Log::log().
string formatMessage | ( | int | level, | |
const std::string & | message | |||
) | [protected] |
Turn a message string into the current log format.
Definition at line 146 of file Logging.cc.
References Log::endColorCode, Log::getColorCode(), Log::getLevelName(), Log::getName(), Log::showLoggerName, Log::showLogLevel, Log::showTimestamp, and Log::useShellColors.
Referenced by Log::log(), and Rivet::operator<<().
00146 { 00147 string out; 00148 if (Log::useShellColors) { 00149 out += getColorCode(level); 00150 } 00151 00152 if (Log::showLoggerName) { 00153 out += getName(); 00154 out += ": "; 00155 } 00156 00157 if (Log::showLogLevel) { 00158 out += Log::getLevelName(level); 00159 out += " "; 00160 } 00161 00162 if (Log::showTimestamp) { 00163 time_t rawtime; 00164 time(&rawtime); 00165 char* timestr = ctime(&rawtime); 00166 timestr[24] = ' '; 00167 out += timestr; 00168 out += " "; 00169 } 00170 00171 if (Log::useShellColors) { 00172 out += endColorCode; 00173 } 00174 00175 out += " "; 00176 out += message; 00177 00178 return out; 00179 }
string getColorCode | ( | int | level | ) | [static, protected] |
Definition at line 109 of file Logging.cc.
References Log::colorCodes, Log::DEBUG, Log::endColorCode, Log::ERROR, Log::INFO, Log::TRACE, Log::useShellColors, and Log::WARN.
Referenced by Log::formatMessage().
00109 { 00110 if (!Log::useShellColors) return ""; 00111 // If the codes haven't been initialized, do so now. 00112 if (Log::colorCodes.empty()) { 00113 // If stdout is a valid tty, try to use the appropriate codes. 00114 if (isatty(1)) { 00115 /// @todo Test for VT100 compliance? 00116 Log::colorCodes[TRACE] = "\033[0;37m"; 00117 Log::colorCodes[DEBUG] = "\033[0;36m"; 00118 Log::colorCodes[INFO] = "\033[0;32m"; 00119 Log::colorCodes[WARN] = "\033[0;33m"; 00120 Log::colorCodes[ERROR] = "\033[0;31m"; 00121 Log::endColorCode = "\033[0m"; 00122 } else { 00123 Log::colorCodes[TRACE] = ""; 00124 Log::colorCodes[DEBUG] = ""; 00125 Log::colorCodes[INFO] = ""; 00126 Log::colorCodes[WARN] = ""; 00127 Log::colorCodes[ERROR] = ""; 00128 } 00129 } 00130 // Return the appropriate code from the colour map. 00131 /// @todo Do the map::upper_limit thing to find nearest level... 00132 return colorCodes[level]; 00133 }
int getLevel | ( | ) | const [inline] |
Get the priority level of this logger.
Definition at line 95 of file Logging.hh.
References Log::_level.
00095 { 00096 return _level; 00097 }
Log::Level getLevelFromName | ( | const std::string & | level | ) | [static] |
Get a log level enum from a string.
Definition at line 136 of file Logging.cc.
References Log::DEBUG, Log::ERROR, Log::INFO, Log::TRACE, and Log::WARN.
string getLevelName | ( | int | level | ) | [static] |
Get the std::string representation of a log level.
Definition at line 89 of file Logging.cc.
References Log::DEBUG, Log::ERROR, Log::INFO, Log::TRACE, and Log::WARN.
Referenced by Log::formatMessage().
00089 { 00090 /// @todo Do the map::upper_limit thing to find nearest level... 00091 switch(level) { 00092 case TRACE: 00093 return "TRACE"; 00094 case DEBUG: 00095 return "DEBUG"; 00096 case INFO: 00097 return "INFO"; 00098 case WARN: 00099 return "WARN"; 00100 case ERROR: 00101 return "ERROR"; 00102 default: 00103 return ""; 00104 } 00105 //throw Error("Enum value was not a valid log level. How did that happen?"); 00106 }
Log & getLog | ( | const std::string & | name | ) | [static] |
Get a logger with the given name. The level will be taken from the "requestedLevels" static map or will be INFO by default.
Definition at line 55 of file Logging.cc.
References Log::defaultLevels, Log::existingLogs, Log::INFO, and Log::Log().
Referenced by Event::_geNormAlignment(), Run::init(), AnalysisInfo::make(), mt2::mt2_massless(), Run::openFile(), Run::processEvent(), and Run::readEvent().
00055 { 00056 if (existingLogs.find(name) == existingLogs.end()) { 00057 int level = INFO; 00058 // Try running through all parent classes to find an existing level 00059 string tmpname = name; 00060 bool triedAllParents = false; 00061 while (! triedAllParents) { 00062 // Is there a default level? 00063 if (defaultLevels.find(tmpname) != defaultLevels.end()) { 00064 level = defaultLevels.find(tmpname)->second; 00065 break; 00066 } 00067 // Is there already such a logger? (NB. tmpname != name) 00068 if (existingLogs.find(tmpname) != existingLogs.end()) { 00069 level = existingLogs.find(tmpname)->second->getLevel(); 00070 break; 00071 } 00072 // Crop the string back to the next parent level 00073 size_t lastDot = tmpname.find_last_of("."); 00074 if (lastDot != string::npos) { 00075 tmpname = tmpname.substr(0, lastDot); 00076 } else { 00077 triedAllParents = true; 00078 } 00079 } 00080 // for (LevelMap::const_iterator l = defaultLevels.begin(); l != defaultLevels.end(); ++l) { 00081 // 00082 // } 00083 existingLogs[name] = new Log(name, level); 00084 } 00085 return *existingLogs[name]; 00086 }
std::string getName | ( | ) | const [inline] |
Get the name of this logger.
Definition at line 112 of file Logging.hh.
References Log::_name.
Referenced by Log::formatMessage().
00112 { 00113 return _name; 00114 }
void info | ( | const std::string & | message | ) | [inline] |
Definition at line 133 of file Logging.hh.
References Log::INFO, and Log::log().
bool isActive | ( | int | level | ) | const [inline] |
Will this log level produce output on this logger at the moment?
Definition at line 123 of file Logging.hh.
References Log::_level.
Referenced by Event::_geNormAlignment(), InvMassFinalState::calc(), Log::log(), Rivet::operator<<(), VetoedFinalState::project(), InitialQuarks::project(), and ChargedFinalState::project().
00123 { 00124 return (level >= _level); 00125 }
void log | ( | int | level, | |
const std::string & | message | |||
) | [protected] |
Write a message at a particular level.
Definition at line 182 of file Logging.cc.
References Log::formatMessage(), and Log::isActive().
Referenced by Log::debug(), Log::error(), Log::info(), Log::trace(), and Log::warn().
00182 { 00183 if (isActive(level)) { 00184 cout << formatMessage(level, message) << endl; 00185 } 00186 }
Log& setLevel | ( | int | level | ) | [inline] |
Set the priority level of this logger.
Definition at line 100 of file Logging.hh.
References Log::_level.
00100 { 00101 _level = level; 00102 return *this; 00103 }
void setLevel | ( | const std::string & | name, | |
int | level | |||
) | [static] |
Set the log levels.
Definition at line 40 of file Logging.cc.
References Rivet::_updateLevels(), Log::defaultLevels, and Log::existingLogs.
00040 { 00041 defaultLevels[name] = level; 00042 //cout << name << " -> " << level << endl; 00043 _updateLevels(defaultLevels, existingLogs); 00044 }
void setLevels | ( | const LevelMap & | logLevels | ) | [static] |
Definition at line 47 of file Logging.cc.
References Rivet::_updateLevels(), Log::defaultLevels, and Log::existingLogs.
00047 { 00048 for (LevelMap::const_iterator lev = logLevels.begin(); lev != logLevels.end(); ++lev) { 00049 defaultLevels[lev->first] = lev->second; 00050 } 00051 _updateLevels(defaultLevels, existingLogs); 00052 }
Log& setName | ( | const std::string & | name | ) | [inline] |
Set the name of this logger.
Definition at line 117 of file Logging.hh.
References Log::_name.
00117 { 00118 _name = name; 00119 return *this; 00120 }
static void setShowLevel | ( | bool | showLevel = true |
) | [inline, static] |
Definition at line 60 of file Logging.hh.
References Log::showLogLevel.
00060 { 00061 showLogLevel = showLevel; 00062 }
static void setShowLoggerName | ( | bool | showName = true |
) | [inline, static] |
Definition at line 64 of file Logging.hh.
References Log::showLoggerName.
00064 { 00065 showLoggerName = showName; 00066 }
static void setShowTimestamp | ( | bool | showTime = true |
) | [inline, static] |
Definition at line 56 of file Logging.hh.
References Log::showTimestamp.
00056 { 00057 showTimestamp = showTime; 00058 }
static void setUseColors | ( | bool | useColors = true |
) | [inline, static] |
Definition at line 68 of file Logging.hh.
References Log::useShellColors.
00068 { 00069 useShellColors = useColors; 00070 }
void trace | ( | const std::string & | message | ) | [inline] |
Definition at line 129 of file Logging.hh.
References Log::log(), and Log::TRACE.
void warn | ( | const std::string & | message | ) | [inline] |
Definition at line 135 of file Logging.hh.
References Log::log(), and Log::WARN.
std::ostream& operator<< | ( | Log & | log, | |
int | level | |||
) | [friend] |
The streaming operator can use Log's internals.
Definition at line 189 of file Logging.cc.
int _level [private] |
Threshold level for this logger.
Definition at line 145 of file Logging.hh.
Referenced by Log::getLevel(), Log::isActive(), and Log::setLevel().
std::string _name [private] |
This logger's name.
Definition at line 142 of file Logging.hh.
Referenced by Log::getName(), and Log::setName().
std::ostream* const _nostream |
A null output stream, used for piping discarded output to nowhere.
Definition at line 158 of file Logging.hh.
Referenced by Rivet::operator<<().
Log::ColorCodes colorCodes [static, private] |
A static map of shell color codes for the log levels.
Definition at line 34 of file Logging.hh.
Referenced by Log::getColorCode().
Log::LevelMap defaultLevels [static, private] |
A static map of default log levels.
Definition at line 31 of file Logging.hh.
Referenced by Log::getLog(), Log::setLevel(), and Log::setLevels().
string endColorCode [static, private] |
Shell color code for the end of the log levels.
Definition at line 37 of file Logging.hh.
Referenced by Log::formatMessage(), and Log::getColorCode().
Log::LogMap existingLogs [static, private] |
A static map of existing logs: we don't make more loggers than necessary.
Definition at line 28 of file Logging.hh.
Referenced by Log::getLog(), Log::setLevel(), and Log::setLevels().
bool showLoggerName = true [static, private] |
Show logger name?
Definition at line 46 of file Logging.hh.
Referenced by Log::formatMessage(), and Log::setShowLoggerName().
bool showLogLevel = true [static, private] |
Show log level?
Definition at line 43 of file Logging.hh.
Referenced by Log::formatMessage(), and Log::setShowLevel().
bool showTimestamp = false [static, private] |
Show timestamp?
Definition at line 40 of file Logging.hh.
Referenced by Log::formatMessage(), and Log::setShowTimestamp().
bool useShellColors = true [static, private] |
Use shell colour escape codes?
Definition at line 49 of file Logging.hh.
Referenced by Log::formatMessage(), Log::getColorCode(), and Log::setUseColors().