cLogger.cpp

00001 // Copyright (c) 2008-2010 Raynaldo (Wildicv) Rivera, Joshua (Dark_Kilauea) Jones
00002 // This file is part of the "cAudio Engine"
00003 // For conditions of distribution and use, see copyright notice in cAudio.h
00004 
00005 #include <time.h>
00006 #include "../Headers/cLogger.h"
00007 #include "../Headers/cConsoleLogReceiver.h"
00008 #include "../Headers/cFileLogReceiver.h"
00009 #include "../Headers/cUtils.h"
00010 
00011 namespace cAudio
00012 {
00013         static cLogger Logger;
00014         static bool FirstTimeLogInit(false);
00015         static cConsoleLogReceiver ConsoleLog;
00016         static cFileLogReceiver FileLog;
00017 
00018         cLogger::cLogger() : StartTime(0), MinLogLevel(ELL_INFO)
00019         {
00020                 StartTime = clock();
00021         }
00022 
00023         void cLogger::logCritical( const char* sender, const char *msg, ... )
00024         {
00025                 if(ELL_CRITICAL >= MinLogLevel)
00026                 {
00027                         Mutex.lock();
00028                         va_list args;
00029                         va_start( args, msg );
00030                         broadcastMessage( ELL_CRITICAL, sender, msg, args );
00031                         va_end( args );
00032                         Mutex.unlock();
00033                 }
00034         }
00035         void cLogger::logError( const char* sender, const char *msg, ... )
00036         {
00037                 if(ELL_ERROR >= MinLogLevel)
00038                 {
00039                         Mutex.lock();
00040                         va_list args;
00041                         va_start( args, msg );
00042                         broadcastMessage( ELL_ERROR, sender, msg, args );
00043                         va_end( args );
00044                         Mutex.unlock();
00045                 }
00046         }
00047         void cLogger::logWarning( const char* sender, const char *msg, ... )
00048         {
00049                 if(ELL_WARNING >= MinLogLevel)
00050                 {
00051                         Mutex.lock();
00052                         va_list args;
00053                         va_start( args, msg );
00054                         broadcastMessage( ELL_WARNING, sender, msg, args );
00055                         va_end( args );
00056                         Mutex.unlock();
00057                 }
00058         }
00059         void cLogger::logInfo( const char* sender, const char *msg, ... )
00060         {
00061                 if(ELL_INFO >= MinLogLevel)
00062                 {
00063                         Mutex.lock();
00064                         va_list args;
00065                         va_start( args, msg );
00066                         broadcastMessage( ELL_INFO, sender, msg, args );
00067                         va_end( args );
00068                         Mutex.unlock();
00069                 }
00070         }
00071         void cLogger::logDebug( const char* sender, const char *msg, ... )
00072         {
00073                 if(ELL_DEBUG >= MinLogLevel)
00074                 {
00075                         Mutex.lock();
00076                         va_list args;
00077                         va_start( args, msg );
00078                         broadcastMessage( ELL_DEBUG, sender, msg, args );
00079                         va_end( args );
00080                         Mutex.unlock();
00081                 }
00082         }
00083         void cLogger::setLogLevel( const LogLevel& logLevel )
00084         {
00085                 Mutex.lock();
00086                 MinLogLevel = logLevel;
00087                 Mutex.unlock();
00088         }
00089         void cLogger::broadcastMessage( LogLevel level, const char* sender, const char* msg, va_list args )
00090         {
00091                 float messageTime = (clock() - StartTime) / (float)CLOCKS_PER_SEC;
00092                 vsnprintf( TempTextBuf, 2048, msg, args );
00093 
00094                 std::map<std::string,ILogReceiver*>::iterator it = Receivers.begin();
00095         for (it = Receivers.begin(); it != Receivers.end(); it++)
00096         {
00097             it->second->OnLogMessage(sender, TempTextBuf, level, messageTime);
00098         }
00099         }
00100         bool cLogger::registerLogReceiver(ILogReceiver* receiver, const char* name)
00101     {
00102                 Mutex.lock();
00103                 std::string logName = safeCStr(name);
00104         Receivers[logName] = receiver;
00105                 Mutex.unlock();
00106                 return true;
00107     }
00108 
00109         void cLogger::unRegisterLogReceiver(const char* name)
00110         {
00111                 Mutex.lock();
00112                 std::string logName = safeCStr(name);
00113                 std::map<std::string, ILogReceiver*>::iterator it = Receivers.find(logName);
00114                 if(it != Receivers.end())
00115                 {
00116                         Receivers.erase(it);
00117                 }
00118                 Mutex.unlock();
00119         }
00120 
00121         bool cLogger::isLogReceiverRegistered(const char* name)
00122         {
00123                 Mutex.lock();
00124                 std::string logName = safeCStr(name);
00125                 std::map<std::string, ILogReceiver*>::iterator it = Receivers.find(logName);
00126                 bool result = (it != Receivers.end());
00127                 Mutex.unlock();
00128                 return result;
00129         }
00130 
00131         ILogReceiver* cLogger::getLogReceiver(const char* name)
00132         {
00133                 Mutex.lock();
00134                 std::string logName = safeCStr(name);
00135                 std::map<std::string, ILogReceiver*>::iterator it = Receivers.find(logName);
00136                 if(it != Receivers.end())
00137                 {
00138                         Mutex.unlock();
00139                         return it->second;
00140                 }
00141                 Mutex.unlock();
00142                 return NULL;
00143         }
00144 
00145         CAUDIO_API ILogger* getLogger()
00146         {
00147                 if(!FirstTimeLogInit)
00148                 {
00149                         FirstTimeLogInit = true;
00150                         Logger.registerLogReceiver(&ConsoleLog, "Console");
00151                         Logger.registerLogReceiver(&FileLog,"File");
00152                 }
00153                 return &Logger;
00154         }
00155 };
 All Classes Namespaces Functions Variables Enumerations

Generated on Sat Feb 20 22:55:08 2010 for cAudio by  doxygen 1.6.2