DCMTK: dcmtk::log4cplus::Hierarchy Class Reference

DCMTK Version 3.6.9 OFFIS DICOM Toolkit

Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | List of all members
dcmtk::log4cplus::Hierarchy Class Reference

This class is specialized in retrieving loggers by name and also maintaining the logger hierarchy. More...

## Public Member Functions
| Hierarchy ()
| Create a new Logger hierarchy.
virtual void | clear ()
| This call will clear all logger definitions from the internal hashtable.
virtual bool | exists (const log4cplus::tstring &name)
| Returns `true` if the named logger exists (in the default hierarchy).
virtual void | disable (const log4cplus::tstring &loglevelStr)
| Similar to `disable(LogLevel)` except that the LogLevel argument is given as a log4cplus::tstring.
virtual void | disable (LogLevel ll)
| Disable all logging requests of LogLevel equal to or below the ll parameter `p`, for all loggers in this hierarchy.
virtual void | disableAll ()
| Disable all logging requests regardless of logger and LogLevel.
virtual void | disableDebug ()
| Disable all Debug logging requests regardless of logger.
virtual void | disableInfo ()
| Disable all Info logging requests regardless of logger.
virtual void | enableAll ()
| Undoes the effect of calling any of `disable`, `disableAll`, `disableDebug` and `disableInfo` methods.
virtual Logger | getInstance (const log4cplus::tstring &name)
| Return a new logger instance named as the first parameter using the default factory.
virtual Logger | getInstance (const log4cplus::tstring &name, spi::LoggerFactory &factory)
| Return a new logger instance named as the first parameter using `factory`.
virtual LoggerList | getCurrentLoggers ()
| Returns all the currently defined loggers in this hierarchy.
virtual bool | isDisabled (LogLevel level)
| Is the LogLevel specified by `level` enabled?
virtual Logger | getRoot () const
| Get the root of this hierarchy.
virtual void | resetConfiguration ()
| Reset all values contained in this hierarchy instance to their default.
virtual void | setLoggerFactory (OFunique_ptr< spi::LoggerFactory > factory)
| Set the default LoggerFactory instance.
virtual spi::LoggerFactory * | getLoggerFactory ()
| Returns the default LoggerFactory instance.
virtual void | shutdown ()
| Shutting down a hierarchy will safely close and remove all appenders in all loggers including the root logger.

## Private Member Functions
virtual DCMTK_LOG4CPLUS_PRIVATE Logger | getInstanceImpl (const log4cplus::tstring &name, spi::LoggerFactory &factory)
| This is the implementation of the `getInstance()` method.
virtual DCMTK_LOG4CPLUS_PRIVATE void | initializeLoggerList (LoggerList &list) const
| This is the implementation of the `getCurrentLoggers()`.
DCMTK_LOG4CPLUS_PRIVATE void | updateParents (Logger const &logger)
| This method loops through all the potential parents of logger'.
DCMTK_LOG4CPLUS_PRIVATE void | updateChildren (ProvisionNode &pn, Logger const &logger)
| We update the links for all the children that placed themselves in the provision node 'pn'.

## Detailed Description

This class is specialized in retrieving loggers by name and also maintaining the logger hierarchy.

The casual user should not have to deal with this class directly. However, if you are in an environment where multiple applications run in the same process, then read on.

The structure of the logger hierarchy is maintained by the `getInstance` method. The hierarchy is such that children link to their parent but parents do not have any pointers to their children. Moreover, loggers can be instantiated in any order, in particular descendant before ancestor.

In case a descendant is created before a particular ancestor, then it creates a provision node for the ancestor and adds itself to the provision node. Other descendants of the same ancestor add themselves to the previously created provision node.

## Member Function Documentation

## ◆ clear()

virtual void dcmtk::log4cplus::Hierarchy::clear | ( |  | ) |
| virtual

This call will clear all logger definitions from the internal hashtable.

Invoking this method will irrevocably mess up the logger hierarchy.

You should really know what you are doing before invoking this method.

## ◆ disable()

virtual void dcmtk::log4cplus::Hierarchy::disable | ( | LogLevel | ll | ) |
| virtual

Disable all logging requests of LogLevel equal to or below the ll parameter `p`, for all loggers in this hierarchy.

Logging requests of higher LogLevel then `p` remain unaffected.

Nevertheless, if the BasicConfigurator::DISABLE_OVERRIDE_KEY property is set to true, then logging requests are evaluated as usual.

The "disable" family of methods are there for speed. They allow printing methods such as debug, info, etc. to return immediately after an integer comparison without walking the logger hierarchy. In most modern computers an integer comparison is measured in nanoseconds where as a logger walk is measured in units of microseconds.

## ◆ disableAll()

virtual void dcmtk::log4cplus::Hierarchy::disableAll | ( |  | ) |
| virtual

Disable all logging requests regardless of logger and LogLevel.

This method is equivalent to calling `disable` with the argument FATAL_LOG_LEVEL, the highest possible LogLevel.

## ◆ disableDebug()

virtual void dcmtk::log4cplus::Hierarchy::disableDebug | ( |  | ) |
| virtual

Disable all Debug logging requests regardless of logger.

This method is equivalent to calling `disable` with the argument DEBUG_LOG_LEVEL.

## ◆ disableInfo()

virtual void dcmtk::log4cplus::Hierarchy::disableInfo | ( |  | ) |
| virtual

Disable all Info logging requests regardless of logger.

This method is equivalent to calling `disable` with the argument INFO_LOG_LEVEL.

## ◆ enableAll()

virtual void dcmtk::log4cplus::Hierarchy::enableAll | ( |  | ) |
| virtual

Undoes the effect of calling any of `disable`, `disableAll`, `disableDebug` and `disableInfo` methods.

More precisely, invoking this method sets the Logger class internal variable called `disable` to its default "off" value.

## ◆ exists()

virtual bool dcmtk::log4cplus::Hierarchy::exists | ( | const log4cplus::tstring & | name | ) |
| virtual

Returns `true` if the named logger exists (in the default hierarchy).

Parameters

  name | The name of the logger to search for.

## ◆ getCurrentLoggers()

virtual LoggerList dcmtk::log4cplus::Hierarchy::getCurrentLoggers | ( |  | ) |
| virtual

Returns all the currently defined loggers in this hierarchy.

The root logger is not included in the returned list.

## ◆ getInstance() [1/2]

virtual Logger dcmtk::log4cplus::Hierarchy::getInstance | ( | const log4cplus::tstring & | name | ) |
| virtual

Return a new logger instance named as the first parameter using the default factory.

If a logger of that name already exists, then it will be returned. Otherwise, a new logger will be instantiated and then linked with its existing ancestors as well as children.

Parameters

  name | The name of the logger to retrieve.

## ◆ getInstance() [2/2]

virtual Logger dcmtk::log4cplus::Hierarchy::getInstance | ( | const log4cplus::tstring & | name,
|  | spi::LoggerFactory & | factory )
| virtual

Return a new logger instance named as the first parameter using `factory`.

If a logger of that name already exists, then it will be returned. Otherwise, a new logger will be instantiated by the `factory` parameter and linked with its existing ancestors as well as children.

Parameters

  name | The name of the logger to retrieve.
  factory | The factory that will make the new logger instance.

## ◆ getInstanceImpl()

virtual DCMTK_LOG4CPLUS_PRIVATE Logger dcmtk::log4cplus::Hierarchy::getInstanceImpl | ( | const log4cplus::tstring & | name,
|  | spi::LoggerFactory & | factory )
| privatevirtual

This is the implementation of the `getInstance()` method.

NOTE: This method does not lock the `hashtable_mutex`.

## ◆ initializeLoggerList()

virtual DCMTK_LOG4CPLUS_PRIVATE void dcmtk::log4cplus::Hierarchy::initializeLoggerList | ( | LoggerList & | list | ) | const
| privatevirtual

This is the implementation of the `getCurrentLoggers()`.

NOTE: This method does not lock the `hashtable_mutex`.

## ◆ resetConfiguration()

virtual void dcmtk::log4cplus::Hierarchy::resetConfiguration | ( |  | ) |
| virtual

Reset all values contained in this hierarchy instance to their default.

This removes all appenders from all loggers, sets the LogLevel of all non-root loggers to `NOT_SET_LOG_LEVEL`, sets their additivity flag to `true` and sets the LogLevel of the root logger to DEBUG_LOG_LEVEL. Moreover, message disabling is set its default "off" value.

Existing loggers are not removed. They are just reset.

This method should be used sparingly and with care as it will block all logging until it is completed.

## ◆ shutdown()

virtual void dcmtk::log4cplus::Hierarchy::shutdown | ( |  | ) |
| virtual

Shutting down a hierarchy will safely close and remove all appenders in all loggers including the root logger.

Some appenders such as SocketAppender need to be closed before the application exits. Otherwise, pending logging events might be lost.

The `shutdown` method is careful to close nested appenders before closing regular appenders. This is allows configurations where a regular appender is attached to a logger and again to a nested appender.

## ◆ updateChildren()

DCMTK_LOG4CPLUS_PRIVATE void dcmtk::log4cplus::Hierarchy::updateChildren | ( | ProvisionNode & | pn,
|  | Logger const & | logger )
| private

We update the links for all the children that placed themselves in the provision node 'pn'.

The second argument 'logger' is a reference for the newly created Logger, parent of all the children in 'pn'

We loop on all the children 'c' in 'pn':

If the child 'c' has been already linked to a child of 'logger' then there is no need to update 'c'.

Otherwise, we set logger's parent field to c's parent and set c's parent field to logger.

References Hierarchy().

## ◆ updateParents()

DCMTK_LOG4CPLUS_PRIVATE void dcmtk::log4cplus::Hierarchy::updateParents | ( | Logger const & | logger | ) |
| private

This method loops through all the potential parents of logger'.

There 3 possible cases:

1) No entry for the potential parent of 'logger' exists

We create a ProvisionNode for this potential parent and insert 'logger' in that provision node.

2) There is an entry of type Logger for the potential parent.

The entry is 'logger's nearest existing parent. We update logger's parent field with this entry. We also break from the loop because updating our parent's parent is our parent's responsibility.

3) There entry is of type ProvisionNode for this potential parent.

We add 'logger' to the list of children for this potential parent.

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

- oflog/include/dcmtk/oflog/hierarchy.h

Generated on Sat Mar 1 2025 for DCMTK Version 3.6.9 by Doxygen 1.13.2