*******************************************************************************/
-#include <cstdarg>
-#include <cstdio> // snprintf
-#include <cstring> // strcpy
+#include <fstream>
#include "Log.hh"
+#include "Script.hh"
namespace Mf {
-static LogLevel logLevel_ = LOG_WARNING;
+Log::Level Log::gLevel = Log::INFO;
-inline void printLog_(int logLevel, const char* fmt, va_list args)
-{
- if (logLevel_ < logLevel) return;
- switch (logLevel)
- {
- case LOG_ERROR:
- fprintf(stderr, " error: ");
- break;
- case LOG_WARNING:
- fprintf(stderr, "warning: ");
- break;
- case LOG_INFO:
- fprintf(stderr, " info: ");
- break;
- case LOG_DEBUG:
- fprintf(stderr, " debug: ");
- break;
- }
-
- vfprintf(stderr, fmt, args);
- fprintf(stderr, "\n");
+void Log::setLevel(Level level)
+{
+ if (level != 0) gLevel = level;
}
-
-LogLevel setLogLevel(LogLevel level)
+Log::Level Log::getLevel()
{
- if (level != 0)
- logLevel_ = level;
-
- return logLevel_;
+ return gLevel;
}
-void logError(const char* fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
+static std::ofstream nullLog_;
- printLog_(LOG_ERROR, fmt, args);
+std::ostream& log(std::clog);
+std::ostream& nullLog(nullLog_);
- va_end(args);
-}
+Log logError(Log::ERRORR, " error: ");
+Log logWarning(Log::WARNING, "warning: ");
+Log logInfo(Log::INFO, " info: ");
-void logWarning(const char* fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
- printLog_(LOG_WARNING, fmt, args);
-
- va_end(args);
-}
-
-void logInfo(const char* fmt, ...)
+static int logScript_(Script& script, Log::Level level)
{
- va_list args;
- va_start(args, fmt);
+ static Log* logs[] = {0, &logError, &logWarning, &logInfo};
- printLog_(LOG_INFO, fmt, args);
+ Script::Slot param = script[1];
- va_end(args);
-}
+ while (!param.isNone())
+ {
+ (*logs[level])(param);
+ ++param.index;
+ }
-void logDebug(const char* fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
+ return 0;
+}
- printLog_(LOG_DEBUG, fmt, args);
- va_end(args);
+void importLogFunctions(Script& script)
+{
+ script.importFunction("LogError", boost::bind(logScript_, _1, Log::ERRORR));
+ script.importFunction("LogWarning", boost::bind(logScript_, _1, Log::WARNING));
+ script.importFunction("LogInfo", boost::bind(logScript_, _1, Log::INFO));
+ script.importFunction("print", boost::bind(logScript_, _1, Log::INFO));
}