Home | History | Annotate | Download | only in src
      1 /* ------------------------------------------------------------------
      2  * Copyright (C) 1998-2009 PacketVideo
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
     13  * express or implied.
     14  * See the License for the specific language governing permissions
     15  * and limitations under the License.
     16  * -------------------------------------------------------------------
     17  */
     18 #ifndef PVLOGGER_REGISTRY_H_INCLUDED
     19 #define PVLOGGER_REGISTRY_H_INCLUDED
     20 
     21 #ifndef PVLOGGER_H_INCLUDED
     22 #include "pvlogger.h"
     23 #endif
     24 
     25 #ifndef OSCL_TAGTREE_H_INCLUDED
     26 #include "oscl_tagtree.h"
     27 #endif
     28 
     29 /**
     30  * Class: PVLoggerRegistry
     31  *
     32  * PVLoggerRegistry class, maintains a repository of all the loggers, along with
     33  * their associated tags, in a tag tree. Any request for a log control point is
     34  * serviced by this class.
     35  *
     36  * Memory Ownership: Creates log control points for each tag, and holds these
     37  * pointers in the tag tree. PVLogger registry is responsible for calling the
     38  * destructor on each of these loggers.
     39  *
     40  */
     41 
     42 class PVLoggerRegistry
     43 {
     44     public:
     45 
     46         typedef PVLogger::log_level_type log_level_type;
     47         typedef PVLogger::alloc_type alloc_type;
     48 
     49         /**
     50          * Get the logger registry.  There is only one logger
     51          * registry instance per thread.
     52          */
     53         OSCL_IMPORT_REF static PVLoggerRegistry* GetPVLoggerRegistry();
     54 
     55         /**
     56          * PVLoggerRegistry Constructor
     57          *
     58          */
     59         OSCL_IMPORT_REF PVLoggerRegistry();
     60 
     61         /**
     62          * PVLoggerRegistry Destructor
     63          *
     64          */
     65         OSCL_IMPORT_REF virtual ~PVLoggerRegistry();
     66 
     67         /**
     68          * PVLoggerRegistry method to get access to a logging control point, associated with
     69          * a tag. In case the logger for this tag does not exist, it is created afresh, else
     70          * pointer to the existing one is returned.
     71          *
     72          * @param inputTag   logger tag, viz. "x.y.z"
     73          * @param level      log level associated with the logging control point
     74          *
     75          * @param oAppenderInheritance
     76          *
     77          * @return PVLogger<Alloc, TheLock>* Pointer to the logging control point
     78          */
     79         OSCL_IMPORT_REF PVLogger *GetPVLoggerObject(const char* tagIn);
     80 
     81         /**
     82          * This method creates a log control point, with specified tag, and level
     83          *
     84          * @param inputTag   logger tag, viz. "x.y.z"
     85          * @param level      log level associated with the logging control point
     86          *
     87          * @param oAppenderInheritance
     88          *
     89          * @return PVLogger<alloc_type, TheLock>* Pointer to the logging control point
     90          */
     91         OSCL_IMPORT_REF PVLogger *CreatePVLogger(const char* tagIn, log_level_type level, bool oAppenderInheritance);
     92 
     93         /**
     94          * This method propagates the log level to all the descendents of the node,
     95          * with a specified tag.
     96          *
     97          * @param tagIn      logger tag, viz. "x.y.z"
     98          * @param level      log level associated with the logging control point
     99          *
    100          * @return           true on success, else false.
    101          */
    102         OSCL_IMPORT_REF bool SetNodeLogLevelExplicit(char* tagIn, log_level_type level);
    103 
    104         /**
    105          * This method recursively propagates the log level to all the descendents,
    106          * of a node.
    107          *
    108          * @param node       Node ptr, associated with a logger, from the tag tree.
    109          * @param level      log level associated with the logging control point
    110          *
    111          * @return           NONE
    112          */
    113         OSCL_IMPORT_REF void SetNodeLogLevelExplicit(Oscl_TagTree<PVLogger*, alloc_type>::node_type* node, log_level_type level);
    114 
    115     private:
    116 #if (PVLOGGER_ENABLE)
    117         Oscl_TAlloc<PVLogger, alloc_type> _pvloggerAlloc;
    118         Oscl_TagTree<PVLogger*, alloc_type> _loggerTree;
    119 #endif
    120 };
    121 
    122 #endif // PVLOGGER_REGISTRY_H_INCLUDED
    123 
    124