summaryrefslogtreecommitdiff
path: root/2004/i/nono/src/logger
diff options
context:
space:
mode:
authorschodet2004-04-16 16:46:46 +0000
committerschodet2004-04-16 16:46:46 +0000
commita3a3a4d6d183b22036a606cda8553192c98321cd (patch)
tree37d158408eabfbb8524d1214a985a44e376ee333 /2004/i/nono/src/logger
parente68b824329a537eddddd5b59b9bdf498698ee604 (diff)
Logger fonctionne.
MovementRotation aussi. Ajout de Serial::wait. Ajout de commentaires.
Diffstat (limited to '2004/i/nono/src/logger')
-rw-r--r--2004/i/nono/src/logger/log.cc85
-rw-r--r--2004/i/nono/src/logger/log.h22
-rw-r--r--2004/i/nono/src/logger/logger.cc8
-rw-r--r--2004/i/nono/src/logger/logger.h4
4 files changed, 83 insertions, 36 deletions
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<int> (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<int> (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<Level> (i);
+ case 'n':
+ return static_cast<Level> (none);
+ case 'f':
+ return static_cast<Level> (fatal);
+ case 'e':
+ return static_cast<Level> (error | fatal);
+ case 'w':
+ return static_cast<Level> (warning | error | fatal);
+ case 'i':
+ return static_cast<Level> (info | warning | error | fatal);
+ case 'd':
+ return static_cast<Level> (debug | info | warning | error | fatal);
+ case 'v':
+ return static_cast<Level> (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);