From a3a3a4d6d183b22036a606cda8553192c98321cd Mon Sep 17 00:00:00 2001 From: schodet Date: Fri, 16 Apr 2004 16:46:46 +0000 Subject: Logger fonctionne. MovementRotation aussi. Ajout de Serial::wait. Ajout de commentaires. --- 2004/i/nono/src/logger/log.cc | 85 ++++++++++++++++++++++++++++++---------- 2004/i/nono/src/logger/log.h | 22 ++++++----- 2004/i/nono/src/logger/logger.cc | 8 ++-- 2004/i/nono/src/logger/logger.h | 4 +- 4 files changed, 83 insertions(+), 36 deletions(-) (limited to '2004/i/nono/src/logger') diff --git a/2004/i/nono/src/logger/log.cc b/2004/i/nono/src/logger/log.cc index 4dc4f59..89f4f91 100644 --- a/2004/i/nono/src/logger/log.cc +++ b/2004/i/nono/src/logger/log.cc @@ -53,43 +53,88 @@ Log::operator() (Level level) return *this; } -static const char *levelTab[] = -{ - "none", - "fatal", - "error", - "warning", - "info", - "debug", - "verydebug" -}; - /// Traduit le niveau de log. void Log::toString (Level level, std::string &s) { - s = levelTab[static_cast (level)]; + switch (level) + { + case none: + s = "none"; break; + case fatal: + s = "fatal"; break; + case error: + s = "error"; break; + case warning: + s = "warning"; break; + case info: + s = "info"; break; + case debug: + s = "debug"; break; + case verydebug: + s = "verydebug"; break; + default: + s = "logunknown"; break; + } } /// Traduit le niveau de log. Log::Level Log::toLevel (const std::string &level) { - for (int i = 0; i < static_cast (nbLevel); ++i) + switch (level[0]) + { + case 'n': + return none; + case 'f': + return fatal; + case 'e': + return error; + case 'w': + return warning; + case 'i': + return info; + case 'd': + return debug; + case 'v': + return verydebug; + default: + return levelReserved; + } +} + +/// Traduit le masque de niveau de log. +Log::Level +Log::toLevelMask (const std::string &level) +{ + switch (level[0]) { - if (level == levelTab[i]) - return static_cast (i); + case 'n': + return static_cast (none); + case 'f': + return static_cast (fatal); + case 'e': + return static_cast (error | fatal); + case 'w': + return static_cast (warning | error | fatal); + case 'i': + return static_cast (info | warning | error | fatal); + case 'd': + return static_cast (debug | info | warning | error | fatal); + case 'v': + return static_cast (verydebug | debug | info | warning | error | fatal); + default: + return toLevel (level); } - return nbLevel; } /// Appellé lorsque le tampon streambuf déborde. int Log::overflow (int c) { -/* if (c == '\n') + if (c == '\n') { - if (curLevel_ <= maxLevel_) + if (curLevel_ & levelMask_) logger_.log (module_, instance_, curLevel_, buffer_); buffer_.erase (); } @@ -97,13 +142,13 @@ Log::overflow (int c) { buffer_ += c; } - return c;*/ + return c; } /// Partie commune des constructeurs. void Log::init (void) { - maxLevel_ = logger_.maxLevel (module_); + levelMask_ = logger_.getLevel (module_); } diff --git a/2004/i/nono/src/logger/log.h b/2004/i/nono/src/logger/log.h index d2add57..2d919cd 100644 --- a/2004/i/nono/src/logger/log.h +++ b/2004/i/nono/src/logger/log.h @@ -30,26 +30,26 @@ class Logger; -class Log : public std::ostream, protected std::streambuf +class Log : protected std::streambuf, public std::ostream { public: enum Level { - none, - fatal, - error, - warning, - info, - debug, - verydebug, - nbLevel + none = 0x00, + fatal = 0x01, + error = 0x02, + warning = 0x04, + info = 0x08, + debug = 0x10, + verydebug = 0x20, + levelReserved = 0xffff }; private: std::string module_; std::string instance_; std::string buffer_; static Logger logger_; - Level maxLevel_; + Level levelMask_; Level curLevel_; public: /// Constructeur. @@ -62,6 +62,8 @@ class Log : public std::ostream, protected std::streambuf static void toString (Level level, std::string &s); /// Traduit le niveau de log. static Level toLevel (const std::string &level); + /// Traduit le masque de niveau de log. + static Level toLevelMask (const std::string &level); protected: /// Appellé lorsque le tampon streambuf déborde. int overflow (int c); diff --git a/2004/i/nono/src/logger/logger.cc b/2004/i/nono/src/logger/logger.cc index 60cb013..4f2c4b7 100644 --- a/2004/i/nono/src/logger/logger.cc +++ b/2004/i/nono/src/logger/logger.cc @@ -39,8 +39,8 @@ Logger::Logger (void) { rc.getId (module); rc.getId (level); - l = Log::toLevel (level); - if (l != Log::nbLevel) + l = Log::toLevelMask (level); + if (l != Log::levelReserved) logLevels_[module] = l; else rc.throwError ("Log level expected.\n"); @@ -53,9 +53,9 @@ Logger::Logger (void) } } -/// Récupère le level maximum pour un module. +/// Récupère le log level pour un module. Log::Level -Logger::maxLevel (const std::string &module) const +Logger::getLevel (const std::string &module) const { LogLevels::const_iterator i; i = logLevels_.find (module); diff --git a/2004/i/nono/src/logger/logger.h b/2004/i/nono/src/logger/logger.h index ced2765..6cc7f7d 100644 --- a/2004/i/nono/src/logger/logger.h +++ b/2004/i/nono/src/logger/logger.h @@ -36,8 +36,8 @@ class Logger public: /// Constructeur par default. Logger (void); - /// Récupère le level maximum pour un module. - Log::Level maxLevel (const std::string &module) const; + /// Récupère le log level pour un module. + Log::Level getLevel (const std::string &module) const; /// Loggue un message. void log (const std::string &module, const std::string &instance, Log::Level level, const std::string &msg); -- cgit v1.2.3