summaryrefslogtreecommitdiff
path: root/i/chuck/src/log/log.cc
diff options
context:
space:
mode:
Diffstat (limited to 'i/chuck/src/log/log.cc')
-rw-r--r--i/chuck/src/log/log.cc130
1 files changed, 130 insertions, 0 deletions
diff --git a/i/chuck/src/log/log.cc b/i/chuck/src/log/log.cc
new file mode 100644
index 0000000..cd7bb32
--- /dev/null
+++ b/i/chuck/src/log/log.cc
@@ -0,0 +1,130 @@
+// log.cc
+// robert - programme du robot 2005. {{{
+//
+// Copyright (C) 2004 Nicolas Schodet
+//
+// Robot APB Team/Efrei 2005.
+// Web: http://assos.efrei.fr/robot/
+// Email: robot AT efrei DOT fr
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+// }}}
+#include "log.hh"
+
+#include "config/config.hh"
+#include "logger.hh"
+
+#include <string>
+
+/// Constructeur.
+Log::Log (const char *module, const char *instance)
+ : module_ (module), instance_ (instance)
+{
+ // Get Config
+ Config &config = Config::getInstance ();
+ // Get default level log
+ std::string defaultLvl = config.get<std::string>("log.level.default",
+ "info");
+ level_ = toLevel (defaultLvl);
+ // Get private level if exist
+ level_ = toLevel (config.get<std::string>
+ (std::string ("log.level.") + module_, defaultLvl));
+
+ // Create the null logger
+ loggerNull_ = Logger::create ("null");
+ // Create the real logger
+ logger_ = Logger::create (config.get<std::string>
+ (std::string ("log.logger.") + module_,
+ config.get<std::string>
+ (std::string ("log.logger.default"), "stdout")));
+}
+
+Log::~Log (void)
+{
+ delete loggerNull_;
+ delete logger_;
+}
+
+/// Crée un nouveau LogMessage.
+LogMessage
+Log::operator() (const char *msg, Level level/*info*/) const
+{
+ // Check level
+ if (level <= getLevel())
+ // Use real logger
+ return LogMessage (*this, *logger_, msg, level);
+ else
+ // Use null logger
+ return LogMessage (*this, *loggerNull_, msg, level);
+}
+
+/// Traduit le niveau de log.
+std::string
+Log::toString (Level level)
+{
+ switch (level)
+ {
+ case none:
+ return "none";
+ case fatal:
+ return "fatal";
+ case error:
+ return "error";
+ case warning:
+ return "warning";
+ case info:
+ return "info";
+ case debug:
+ return "debug";
+ case verydebug:
+ return "verydebug";
+ default:
+ return "logunknown";
+ }
+}
+
+/// Traduit le niveau de log.
+Log::Level
+Log::toLevel (const std::string &level)
+{
+ 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;
+ }
+}
+
+/// Change un niveau de log en masque.
+Log::Level
+Log::toLevelMask (Log::Level level)
+{
+ return static_cast <Level> ((level - 1) | level);
+}
+