reSIProcate/rutil  9694
Public Member Functions | Protected Types | Protected Attributes
resip::Log::LocalLoggerMap Class Reference

Thread Local logger settings storage. More...

#include <Log.hxx>

Collaboration diagram for resip::Log::LocalLoggerMap:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 LocalLoggerMap ()
LocalLoggerId create (Type type, Level level, const char *logFileName=NULL, ExternalLogger *externalLogger=NULL)
 Create new logger instance and return its ID (zero on error)
int reinitialize (LocalLoggerId loggerId, Type type, Level level, const char *logFileName=NULL, ExternalLogger *externalLogger=NULL)
 Reinitialize all new setting for a local logger instance.
int remove (LocalLoggerId loggerId)
 Remove existing logger instance from map and destroy.
ThreadDatagetData (LocalLoggerId loggerId)
 Get pointer to ThreadData for given ID and increase use counter.
void decreaseUseCount (LocalLoggerId loggerId)
 Decrease use counter for given loggerId.

Protected Types

typedef HashMap< LocalLoggerId,
std::pair< ThreadData *, int > > 
LoggerInstanceMap
 Storage for Thread Local loggers and their use-counts.

Protected Attributes

LoggerInstanceMap mLoggerInstancesMap
LocalLoggerId mLastLocalLoggerId
 Last used LocalLoggerId.
Mutex mLoggerInstancesMapMutex
 Mutex to synchronize access to Thread Local logger settings storage.

Detailed Description

Thread Local logger settings storage.

Definition at line 340 of file Log.hxx.


Member Typedef Documentation

typedef HashMap<LocalLoggerId, std::pair<ThreadData*, int> > resip::Log::LocalLoggerMap::LoggerInstanceMap [protected]

Storage for Thread Local loggers and their use-counts.

Definition at line 379 of file Log.hxx.


Constructor & Destructor Documentation

resip::Log::LocalLoggerMap::LocalLoggerMap ( ) [inline]

Definition at line 343 of file Log.hxx.


Member Function Documentation

Log::LocalLoggerId Log::LocalLoggerMap::create ( Log::Type  type,
Log::Level  level,
const char *  logFileName = NULL,
ExternalLogger externalLogger = NULL 
)

Create new logger instance and return its ID (zero on error)

Definition at line 626 of file Log.cxx.

{
   Lock lock(mLoggerInstancesMapMutex);
   Log::LocalLoggerId id = ++mLastLocalLoggerId;
   Log::ThreadData *pNewData = new Log::ThreadData(id, type, level, logFileName,
                                                   externalLogger);
   mLoggerInstancesMap[id].first = pNewData;
   mLoggerInstancesMap[id].second = 0;
   return id;
}
void Log::LocalLoggerMap::decreaseUseCount ( Log::LocalLoggerId  loggerId)

Decrease use counter for given loggerId.

Definition at line 693 of file Log.cxx.

{
   Lock lock(mLoggerInstancesMapMutex);
   LoggerInstanceMap::iterator it = mLoggerInstancesMap.find(loggerId);
   if (it != mLoggerInstancesMap.end())
   {
      it->second.second--;
      assert(it->second.second >= 0);
   }
}
Log::ThreadData * Log::LocalLoggerMap::getData ( Log::LocalLoggerId  loggerId)

Get pointer to ThreadData for given ID and increase use counter.

Returns:
NULL if ID does not exist.

Definition at line 680 of file Log.cxx.

{
   Lock lock(mLoggerInstancesMapMutex);
   LoggerInstanceMap::iterator it = mLoggerInstancesMap.find(loggerId);
   if (it == mLoggerInstancesMap.end())
   {
      // No such logger ID
      return NULL;
   }
   it->second.second++;
   return it->second.first;
}
int Log::LocalLoggerMap::reinitialize ( Log::LocalLoggerId  loggerId,
Log::Type  type,
Log::Level  level,
const char *  logFileName = NULL,
ExternalLogger externalLogger = NULL 
)

Reinitialize all new setting for a local logger instance.

Return values:
0on success
1if logger does not exist

Definition at line 640 of file Log.cxx.

{
   Lock lock(mLoggerInstancesMapMutex);
   LoggerInstanceMap::iterator it = mLoggerInstancesMap.find(loggerId);
   if (it == mLoggerInstancesMap.end())
   {
      // No such logger ID
      std::cerr << "Log::LocalLoggerMap::remove(): Unknown local logger id=" << loggerId << std::endl;
      return 1;
   }
   it->second.first->reset();
   it->second.first->set(type, level, logFileName, externalLogger);
   return 0;
}
int Log::LocalLoggerMap::remove ( Log::LocalLoggerId  loggerId)

Remove existing logger instance from map and destroy.

Return values:
0on success
1if logger does not exist
2if logger is still in use
>2on other failures

Definition at line 659 of file Log.cxx.

{
   Lock lock(mLoggerInstancesMapMutex);
   LoggerInstanceMap::iterator it = mLoggerInstancesMap.find(loggerId);
   if (it == mLoggerInstancesMap.end())
   {
      // No such logger ID
      std::cerr << "Log::LocalLoggerMap::remove(): Unknown local logger id=" << loggerId << std::endl;
      return 1;
   }
   if (it->second.second > 0)
   {
      // Non-zero use-count.
      std::cerr << "Log::LocalLoggerMap::remove(): Use count is non-zero (" << it->second.second << ")!" << std::endl;
      return 2;
   }
   delete it->second.first;  // delete ThreadData
   mLoggerInstancesMap.erase(it);
   return 0;
}

Member Data Documentation

Last used LocalLoggerId.

Definition at line 382 of file Log.hxx.

Definition at line 380 of file Log.hxx.

Mutex to synchronize access to Thread Local logger settings storage.

Definition at line 384 of file Log.hxx.


The documentation for this class was generated from the following files: