123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- //
- // LoggingConfigurator.h
- //
- // Library: Util
- // Package: Configuration
- // Module: LoggingConfigurator
- //
- // Definition of the LoggingConfigurator class.
- //
- // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
- // and Contributors.
- //
- // SPDX-License-Identifier: BSL-1.0
- //
- #ifndef Util_LoggingConfigurator_INCLUDED
- #define Util_LoggingConfigurator_INCLUDED
- #include "Poco/Util/Util.h"
- #include "Poco/Formatter.h"
- #include "Poco/Channel.h"
- namespace Poco {
- namespace Util {
- class AbstractConfiguration;
- class Util_API LoggingConfigurator
- /// This utility class uses a configuration object to configure the
- /// logging subsystem of an application.
- ///
- /// The LoggingConfigurator sets up and connects formatters, channels
- /// and loggers. To accomplish its work, the LoggingConfigurator relies on the
- /// functionality provided by the LoggingFactory and LoggingRegistry classes.
- ///
- /// The LoggingConfigurator expects all configuration data to be under a root
- /// property named "logging".
- ///
- /// Configuring Formatters
- ///
- /// A formatter is configured using the "logging.formatters" property. Every
- /// formatter has an internal name, which is only used for referring to it
- /// during configuration time. This name becomes part of the property name.
- /// Every formatter has a mandatory "class" property, which specifies the actual
- /// class implementing the formatter. Any other properties are passed on to
- /// the formatter by calling its setProperty() method.
- ///
- /// A typical formatter definition looks as follows:
- /// logging.formatters.f1.class = PatternFormatter
- /// logging.formatters.f1.pattern = %s: [%p] %t
- /// logging.formatters.f1.times = UTC
- ///
- /// Configuring Channels
- ///
- /// A channel is configured using the "logging.channels" property. Like with
- /// Formatters, every channel has an internal name, which is used during
- /// configuration only. The name becomes part of the property name.
- /// Every channel has a mandatory "class" property, which specifies the actual
- /// class implementing the channel. Any other properties are passed on to
- /// the formatter by calling its setProperty() method.
- ///
- /// For convenience, the "formatter" property of a channel is treated
- /// specifically. The "formatter" property can either be used to refer to
- /// an already defined formatter, or it can be used to specify an "inline"
- /// formatter definition. In either case, when a "formatter" property is
- /// present, the channel is automatically "wrapped" in a FormattingChannel
- /// object.
- ///
- /// Similarly, a channel supports also a "pattern" property, which results
- /// in the automatic instantiation of a FormattingChannel object with a
- /// connected PatternFormatter.
- ///
- /// Examples:
- /// logging.channels.c1.class = ConsoleChannel
- /// logging.channels.c1.formatter = f1
- /// logging.channels.c2.class = FileChannel
- /// logging.channels.c2.path = ${system.tempDir}/sample.log
- /// logging.channels.c2.formatter.class = PatternFormatter
- /// logging.channels.c2.formatter.pattern = %s: [%p] %t
- /// logging.channels.c3.class = ConsoleChannel
- /// logging.channels.c3.pattern = %s: [%p] %t
- ///
- /// Configuring Loggers
- ///
- /// A logger is configured using the "logging.loggers" property. Like with
- /// channels and formatters, every logger has an internal name, which, however,
- /// is only used to ensure the uniqueness of the property names. Note that this
- /// name is different from the logger's full name, which is used to access
- /// the logger at runtime.
- /// Every logger except the root logger has a mandatory "name" property which
- /// is used to specify the logger's full name.
- /// Furthermore, a "channel" property is supported, which can either refer
- /// to a named channel, or which can contain an inline channel definition.
- ///
- /// Examples:
- /// logging.loggers.root.channel = c1
- /// logging.loggers.root.level = warning
- /// logging.loggers.l1.name = logger1
- /// logging.loggers.l1.channel.class = ConsoleChannel
- /// logging.loggers.l1.channel.pattern = %s: [%p] %t
- /// logging.loggers.l1.level = information
- {
- public:
- LoggingConfigurator();
- /// Creates the LoggingConfigurator.
- ~LoggingConfigurator();
- /// Destroys the LoggingConfigurator.
-
- void configure(AbstractConfiguration* pConfig);
- /// Configures the logging subsystem based on
- /// the given configuration.
- ///
- /// A ConfigurationView can be used to pass only
- /// a part of a larger configuration.
- private:
- void configureFormatters(AbstractConfiguration* pConfig);
- void configureChannels(AbstractConfiguration* pConfig);
- void configureLoggers(AbstractConfiguration* pConfig);
- Poco::Formatter* createFormatter(AbstractConfiguration* pConfig);
- Poco::Channel* createChannel(AbstractConfiguration* pConfig);
- void configureChannel(Channel* pChannel, AbstractConfiguration* pConfig);
- void configureLogger(AbstractConfiguration* pConfig);
-
- LoggingConfigurator(const LoggingConfigurator&);
- LoggingConfigurator& operator = (const LoggingConfigurator&);
- };
- } } // namespace Poco::Util
- #endif // Util_LoggingConfigurator_INCLUDED
|