ISIS Core Library 0.7.2 (api 3.0.0)
|
00001 // 00002 // C++ Interface: log 00003 // 00004 // Description: 00005 // 00006 // 00007 // Author: Enrico Reimer<reimer@cbs.mpg.de>, (C) 2008 00008 // 00009 // Copyright: See COPYING file that comes with this distribution 00010 // 00011 // 00012 00013 #ifndef LOG_H 00014 #define LOG_H 00015 00016 #include <string> 00017 #include <boost/scoped_ptr.hpp> 00018 #include "message.hpp" 00019 #include "singletons.hpp" 00020 #include <limits.h> 00021 00023 namespace isis 00024 { 00025 namespace util 00026 { 00027 namespace _internal 00028 { 00029 00030 template<class MODULE> class Log 00031 { 00032 friend class util::Singletons; 00033 boost::shared_ptr<MessageHandlerBase> m_handle; 00034 static boost::shared_ptr<MessageHandlerBase> &getHandle() { 00035 boost::shared_ptr<util::MessageHandlerBase> &handle = Singletons::get < Log<MODULE>, INT_MAX - 1 > ().m_handle; 00036 return handle; 00037 } 00038 Log(): m_handle( new DefaultMsgPrint( notice ) ) {} 00039 public: 00040 template<class HANDLE_CLASS> static void enable( LogLevel enable ) { 00041 setHandler( boost::shared_ptr<MessageHandlerBase>( enable ? new HANDLE_CLASS( enable ) : 0 ) ); 00042 } 00043 static void setHandler( boost::shared_ptr<MessageHandlerBase> handler ) { 00044 getHandle() = handler; 00045 } 00046 static Message send( const char file[], const char object[], int line, LogLevel level ) { 00047 boost::shared_ptr<util::MessageHandlerBase> &handle = getHandle(); 00048 return Message( object, MODULE::name(), file, line, level, handle ); 00049 } 00050 }; 00051 00052 } 00053 } 00054 } 00056 00057 #define ENABLE_LOG(MODULE,HANDLE_CLASS,set)\ 00058 if(!MODULE::use);else isis::util::_internal::Log<MODULE>::enable<HANDLE_CLASS>(set) 00059 00060 #define LOG(MODULE,LEVEL)\ 00061 if(!MODULE::use);else isis::util::_internal::Log<MODULE>::send(__FILE__,__FUNCTION__,__LINE__,LEVEL) 00062 00063 #define LOG_IF(PRED,MODULE,LEVEL)\ 00064 if(!(MODULE::use && (PRED)));else isis::util::_internal::Log<MODULE>::send(__FILE__,__FUNCTION__,__LINE__,LEVEL) 00065 00066 #endif