|
BOSS 8.0.0
BESIII Offline Software System
|
Factory for Stream objects and repository of default streams. More...
#include <StreamFactory.h>
Public Types | |
| typedef Stream *(* | create_stream_callback) (const std::string &, const std::string &) |
| typedef std::map< std::string, create_stream_callback > | stream_factory_collection |
| typedef Stream *(* | create_stream_callback) (const std::string &, const std::string &) |
| typedef std::map< std::string, create_stream_callback > | stream_factory_collection |
| typedef Stream *(* | create_stream_callback) (const std::string &, const std::string &) |
| typedef std::map< std::string, create_stream_callback > | stream_factory_collection |
Public Member Functions | |
| ~StreamFactory () | |
| Stream * | create_stream (const std::string &key) const |
| create a stream from a key | |
| Stream * | get_stream (severity_t s) |
| get stream for severity_t | |
| void | set (severity_t severity, Stream *s) |
| Sets the stream for a given severity_t. | |
| void | set (severity_t severity, const char *key) |
| Setup a stream for a given severity_t based on a key. | |
| Stream * | fatal () |
| Fatal stream. | |
| Stream * | error () |
| Error stream. | |
| Stream * | warning () |
| Warning stream. | |
| Stream * | debug (severity_t s) |
| Debug stream for level. | |
| bool | register_factory (const std::string &name, create_stream_callback callback) |
| register a factory method | |
| void | write_to (std::ostream &stream) const |
| write content of factory to stream | |
| ~StreamFactory () | |
| Stream * | create_stream (const std::string &key) const |
| create a stream from a key | |
| Stream * | get_stream (severity_t s) |
| get stream for severity_t | |
| void | set (severity_t severity, Stream *s) |
| Sets the stream for a given severity_t. | |
| void | set (severity_t severity, const char *key) |
| Setup a stream for a given severity_t based on a key. | |
| Stream * | fatal () |
| Fatal stream. | |
| Stream * | error () |
| Error stream. | |
| Stream * | warning () |
| Warning stream. | |
| Stream * | debug (severity_t s) |
| Debug stream for level. | |
| bool | register_factory (const std::string &name, create_stream_callback callback) |
| register a factory method | |
| void | write_to (std::ostream &stream) const |
| write content of factory to stream | |
| ~StreamFactory () | |
| Stream * | create_stream (const std::string &key) const |
| create a stream from a key | |
| Stream * | get_stream (severity_t s) |
| get stream for severity_t | |
| void | set (severity_t severity, Stream *s) |
| Sets the stream for a given severity_t. | |
| void | set (severity_t severity, const char *key) |
| Setup a stream for a given severity_t based on a key. | |
| Stream * | fatal () |
| Fatal stream. | |
| Stream * | error () |
| Error stream. | |
| Stream * | warning () |
| Warning stream. | |
| Stream * | debug (severity_t s) |
| Debug stream for level. | |
| bool | register_factory (const std::string &name, create_stream_callback callback) |
| register a factory method | |
| void | write_to (std::ostream &stream) const |
| write content of factory to stream | |
Static Public Member Functions | |
| static StreamFactory * | instance () |
| return the singleton | |
| static void | print_registered () |
| static void | fatal (Issue *i) |
| sends an issue to the fatal stream | |
| static void | error (Issue *i) |
| sends an issue to the error stream | |
| static void | warning (Issue *i) |
| sends an issue to the warning stream | |
| static void | warning (const Context &c, const std::string &message) |
| sends a warning message | |
| static void | debug (Issue *i, severity_t) |
| sends an Issue to the debug stream | |
| static void | debug (const Context &c, const std::string &message, severity_t s) |
| sends a debug message | |
| static void | dispatch (Issue *i, bool throw_error=false) |
| Sends an issue to the appropriate stream according to its severity_t. | |
| static void | dispatch (Issue &i, bool throw_error=false) |
| static void | set_stream (severity_t, const std::string &key) |
| static StreamFactory * | instance () |
| return the singleton | |
| static void | print_registered () |
| static void | fatal (Issue *i) |
| sends an issue to the fatal stream | |
| static void | error (Issue *i) |
| sends an issue to the error stream | |
| static void | warning (Issue *i) |
| sends an issue to the warning stream | |
| static void | warning (const Context &c, const std::string &message) |
| sends a warning message | |
| static void | debug (Issue *i, severity_t) |
| sends an Issue to the debug stream | |
| static void | debug (const Context &c, const std::string &message, severity_t s) |
| sends a debug message | |
| static void | dispatch (Issue *i, bool throw_error=false) |
| Sends an issue to the appropriate stream according to its severity_t. | |
| static void | dispatch (Issue &i, bool throw_error=false) |
| static void | set_stream (severity_t, const std::string &key) |
| static StreamFactory * | instance () |
| return the singleton | |
| static void | print_registered () |
| static void | fatal (Issue *i) |
| sends an issue to the fatal stream | |
| static void | error (Issue *i) |
| sends an issue to the error stream | |
| static void | warning (Issue *i) |
| sends an issue to the warning stream | |
| static void | warning (const Context &c, const std::string &message) |
| sends a warning message | |
| static void | debug (Issue *i, severity_t) |
| sends an Issue to the debug stream | |
| static void | debug (const Context &c, const std::string &message, severity_t s) |
| sends a debug message | |
| static void | dispatch (Issue *i, bool throw_error=false) |
| Sends an issue to the appropriate stream according to its severity_t. | |
| static void | dispatch (Issue &i, bool throw_error=false) |
| static void | set_stream (severity_t, const std::string &key) |
Protected Member Functions | |
| StreamFactory () | |
| StreamFactory (const StreamFactory &other) | |
| Stream * | create_stream (severity_t s) |
| create a stream for severity_t | |
| StreamFactory () | |
| StreamFactory (const StreamFactory &other) | |
| Stream * | create_stream (severity_t s) |
| create a stream for severity_t | |
| StreamFactory () | |
| StreamFactory (const StreamFactory &other) | |
| Stream * | create_stream (severity_t s) |
| create a stream for severity_t | |
Static Protected Member Functions | |
| static const char * | key_for_severity (severity_t s) |
| finds key for severity_t | |
| static Stream * | get_default_stream (severity_t s) |
| builds default stream for severity_t | |
| static const char * | key_for_severity (severity_t s) |
| finds key for severity_t | |
| static Stream * | get_default_stream (severity_t s) |
| builds default stream for severity_t | |
| static const char * | key_for_severity (severity_t s) |
| finds key for severity_t | |
| static Stream * | get_default_stream (severity_t s) |
| builds default stream for severity_t | |
Protected Attributes | |
| Stream * | m_streams [severity_max] |
| array of pointers to streams per severity_t | |
| stream_factory_collection | m_factories |
| collection of factories to build streams | |
Static Protected Attributes | |
| static StreamFactory * | s_instance = 0 |
| singleton instance | |
| static const char * | DEFAULT_STREAMS [] |
| keys for default streams | |
Factory for Stream objects and repository of default streams.
The StreamFactory class is responsible for creating and handling all the ers stream used by the system. It implements the singleton pattern and the factory pattern. There should normally only be one instance of this class per process at any time, each instance handles a table of the different stream attached to each severity. When issues occurs, they can be dispatched using this instance. In general, the following method should be used to dispatch issues
dispatch if the severity_t of the issue is set correctly. fatal, error, warning, debug for setting the severity_t and dispatch. The default stream are set up in the following way:
file protocol, or a keyword that identifies a different type of protocol followed by a colon. Certain protocols accepts more information after the colon, for instance for file streams, the rest of the URL is used to specify the file path, and deduce the file format from the file extension.file:/tmp/out.xml represents a stream that writes issues into file /tmp/out.xml in the XML format. cerr:tab represents a stream that writes in tabulated format on the standard output. DEFAULT_STREAMS. The content is a key with the format described above.y set, either by specifying the stream directly, or by providing a key. Different packages offer different stream implementations. To use a specific stream type, the relevant library needs to be linked in. If the key for a type of stream that is not available is used, the system will revert to the default stream.
Supported Keys - ERS package
The ERS package supports by default the following keys:
Supported Keys - System package:
The System package supports the following keys:
Supported Keys - ers-ipc package:
The ersipc package supports the following keys:
In order to add new stream implementations, one needs to register a factory function of type create_stream_callback. This method takes two parameters, a protocol parameter, and an uri parameter, that basically contains everything except the protocol part of the key. If the implementation can offer a stream that corresponds to the key it should return a heap allocated stream, if not it should return a null pointer. This method should be registered using the register_factory method on the default instance.
Macros
This file also defines a set of macros that send messages to the relevant streams in the factory. Those macros are intendred for logging out debug messages. They can compiled out by the way of the DEBUG_LEVEL macro. This macro should be defined with an integer level. A debugging macro is disabled if its number is higher than the value of DEBUG_LEVEL. For instance if DEBUG_LEVEL=2 then ERS_DEBUG_3 is compiled out. ERS_DEBUG_0 is never compiled out. If no debug level is specified, level 3 (maximum) is assumed. If the macro ERS_FAST_DEBUG is defined then ERS_DEBUG_0 macro directly maps to a fprintf statement on stderr.
Definition at line 139 of file Event/ers/include/ers/StreamFactory.h.
| typedef Stream *(* ers::StreamFactory::create_stream_callback) (const std::string &, const std::string &) |
Definition at line 142 of file Event/ers/include/ers/StreamFactory.h.
| typedef Stream *(* ers::StreamFactory::create_stream_callback) (const std::string &, const std::string &) |
Definition at line 142 of file InstallArea/x86_64-el9-gcc13-dbg/include/ers/StreamFactory.h.
| typedef Stream *(* ers::StreamFactory::create_stream_callback) (const std::string &, const std::string &) |
Definition at line 142 of file InstallArea/x86_64-el9-gcc13-opt/include/ers/StreamFactory.h.
| typedef std::map<std::string, create_stream_callback> ers::StreamFactory::stream_factory_collection |
Definition at line 143 of file Event/ers/include/ers/StreamFactory.h.
| typedef std::map<std::string, create_stream_callback> ers::StreamFactory::stream_factory_collection |
Definition at line 143 of file InstallArea/x86_64-el9-gcc13-dbg/include/ers/StreamFactory.h.
| typedef std::map<std::string, create_stream_callback> ers::StreamFactory::stream_factory_collection |
Definition at line 143 of file InstallArea/x86_64-el9-gcc13-opt/include/ers/StreamFactory.h.
|
protected |
Constructor - should never be called by user code, use the instance() method instead
Definition at line 43 of file StreamFactory.cxx.
Referenced by instance(), print_registered(), and StreamFactory().
|
protected |
Copy constructor - disabled, use the instance() method instead
| ers::NotImplemented | in all cases |
Definition at line 56 of file StreamFactory.cxx.
| ers::StreamFactory::~StreamFactory | ( | ) |
Destructor - basic cleanup
Definition at line 66 of file StreamFactory.cxx.
|
protected |
|
protected |
| ers::StreamFactory::~StreamFactory | ( | ) |
|
protected |
|
protected |
| ers::StreamFactory::~StreamFactory | ( | ) |
| ers::Stream * ers::StreamFactory::create_stream | ( | const std::string & | key | ) | const |
create a stream from a key
Builds a stream from a textual key The key should have the format protocol:path.extension In certain cases, the path will be empty. For instance to write in XML format to the error stream, the key is: cerr:.xml
| key | the textual key |
Definition at line 144 of file StreamFactory.cxx.
| Stream * ers::StreamFactory::create_stream | ( | const std::string & | key | ) | const |
create a stream from a key
| Stream * ers::StreamFactory::create_stream | ( | const std::string & | key | ) | const |
create a stream from a key
|
protected |
create a stream for severity_t
Builds a stream for a given severity. The actual key for the severity_t is found using key_for_severity, then the appropriate stream is constructred using create_stream
| s | the severity_t of the requested stream |
Definition at line 178 of file StreamFactory.cxx.
Referenced by create_stream(), ers::FilterStream::factory(), get_stream(), and set().
|
protected |
create a stream for severity_t
|
protected |
create a stream for severity_t
|
static |
sends a debug message
Sends a message to the debug stream
| c | the Context of the message |
| message | the text of the message |
| s | the severity_t of the associated stream. Accepted values:
|
Definition at line 235 of file StreamFactory.cxx.
|
static |
sends a debug message
|
static |
sends a debug message
|
static |
sends an Issue to the debug stream
Sends an issue to the debug stream
| issue_ptr | the Issue to send |
| s | the severity_t of the associated stream. Accepted values:
|
Definition at line 220 of file StreamFactory.cxx.
Referenced by debug().
|
static |
sends an Issue to the debug stream
|
static |
sends an Issue to the debug stream
| ers::Stream * ers::StreamFactory::debug | ( | severity_t | s | ) |
Debug stream for level.
Finds the debug stream
| s | the severity_t of the associated stream. Accepted values:
|
Definition at line 341 of file StreamFactory.cxx.
| Stream * ers::StreamFactory::debug | ( | severity_t | s | ) |
Debug stream for level.
| Stream * ers::StreamFactory::debug | ( | severity_t | s | ) |
Debug stream for level.
|
static |
Definition at line 266 of file StreamFactory.cxx.
|
static |
|
static |
|
static |
Sends an issue to the appropriate stream according to its severity_t.
Dispatches an issue to the appropriate stream. The stream is decided based upon the severity_t specified in the Issue. If throw_error is true errors and fatal errors are not sent to a stream, but thrown in the context of the caller.
| issue_ptr | the Issue to dispatch |
| throw_error | should errors and fatals are thrown |
Definition at line 257 of file StreamFactory.cxx.
Referenced by debug(), dispatch(), error(), fatal(), main(), and warning().
|
static |
Sends an issue to the appropriate stream according to its severity_t.
|
static |
Sends an issue to the appropriate stream according to its severity_t.
| ers::Stream * ers::StreamFactory::error | ( | ) |
| Stream * ers::StreamFactory::error | ( | ) |
Error stream.
| Stream * ers::StreamFactory::error | ( | ) |
Error stream.
|
static |
sends an issue to the error stream
Sends an Issue to the error stream
| issue_ptr |
Definition at line 197 of file StreamFactory.cxx.
|
static |
sends an issue to the error stream
|
static |
sends an issue to the error stream
| ers::Stream * ers::StreamFactory::fatal | ( | ) |
| Stream * ers::StreamFactory::fatal | ( | ) |
Fatal stream.
| Stream * ers::StreamFactory::fatal | ( | ) |
Fatal stream.
|
static |
sends an issue to the fatal stream
Sends an Issue to the fatal error stream
| issue_ptr |
Definition at line 187 of file StreamFactory.cxx.
|
static |
sends an issue to the fatal stream
|
static |
sends an issue to the fatal stream
|
staticprotected |
builds default stream for severity_t
Finds the default stream for a given severity. The stream is searched in the default instance
| s | the severity_t |
Definition at line 104 of file StreamFactory.cxx.
|
staticprotected |
builds default stream for severity_t
|
staticprotected |
builds default stream for severity_t
| ers::Stream * ers::StreamFactory::get_stream | ( | severity_t | s | ) |
get stream for severity_t
Gets stream for severity_t
| s | the severity_t of the requested stream |
Definition at line 282 of file StreamFactory.cxx.
| Stream * ers::StreamFactory::get_stream | ( | severity_t | s | ) |
get stream for severity_t
| Stream * ers::StreamFactory::get_stream | ( | severity_t | s | ) |
get stream for severity_t
|
static |
return the singleton
This method returns the singleton instance. It should be used for every operation on the factory.
Definition at line 83 of file StreamFactory.cxx.
Referenced by dispatch(), ers::FilterStream::factory(), get_default_stream(), print_registered(), and set_stream().
|
static |
return the singleton
|
static |
return the singleton
|
staticprotected |
finds key for severity_t
Searches for the textual key for a given severity. This key is first searched in the environnement variables, if this fails, the default values are loaded. The environnement variable should have the same name than the severity with the prefix ERS_ in front. The whole name should be in uppercases. For instance for severity_t warning, the environnement variable should be ERS_WARNING.
| s | the severity_t |
Definition at line 119 of file StreamFactory.cxx.
Referenced by create_stream().
|
staticprotected |
finds key for severity_t
|
staticprotected |
finds key for severity_t
|
static |
Dumps all registered types of streams
Definition at line 90 of file StreamFactory.cxx.
|
static |
|
static |
| bool ers::StreamFactory::register_factory | ( | const std::string & | name, |
| create_stream_callback | callback ) |
register a factory method
Registers a factory function with the stream factory. The callback is function that takes two parameters
file The function should return a heap allocated stream, or null if it does not understand the protocol.
| name | name of the stream type (human display only). |
| callback | the callback function |
true if the registration was sucessfull Definition at line 359 of file StreamFactory.cxx.
| bool ers::StreamFactory::register_factory | ( | const std::string & | name, |
| create_stream_callback | callback ) |
register a factory method
| bool ers::StreamFactory::register_factory | ( | const std::string & | name, |
| create_stream_callback | callback ) |
register a factory method
| void ers::StreamFactory::set | ( | severity_t | severity, |
| const char * | key ) |
Setup a stream for a given severity_t based on a key.
Builds a stream using a string key and sets it up for a given severity
| severity_t | severity_t of the stream Accepted values:
|
| key | the key used to build the new stream |
Definition at line 311 of file StreamFactory.cxx.
| void ers::StreamFactory::set | ( | severity_t | severity, |
| const char * | key ) |
Setup a stream for a given severity_t based on a key.
| void ers::StreamFactory::set | ( | severity_t | severity, |
| const char * | key ) |
Setup a stream for a given severity_t based on a key.
| void ers::StreamFactory::set | ( | severity_t | severity, |
| Stream * | s ) |
Sets the stream for a given severity_t.
Sets the stream for a given severity_t
| severity_t | severity_t of the stream Accepted values:
|
| s | the new stream |
Definition at line 295 of file StreamFactory.cxx.
Referenced by set().
| void ers::StreamFactory::set | ( | severity_t | severity, |
| Stream * | s ) |
Sets the stream for a given severity_t.
| void ers::StreamFactory::set | ( | severity_t | severity, |
| Stream * | s ) |
Sets the stream for a given severity_t.
|
static |
Definition at line 270 of file StreamFactory.cxx.
Referenced by main(), and massive_test().
|
static |
|
static |
| ers::Stream * ers::StreamFactory::warning | ( | ) |
Warning stream.
Definition at line 333 of file StreamFactory.cxx.
Referenced by main().
| Stream * ers::StreamFactory::warning | ( | ) |
Warning stream.
| Stream * ers::StreamFactory::warning | ( | ) |
Warning stream.
|
static |
sends a warning message
Sends a message to the warning stream
| c | the context of the message |
| message | the message to send |
Definition at line 245 of file StreamFactory.cxx.
|
static |
sends a warning message
|
static |
sends a warning message
|
static |
sends an issue to the warning stream
Sends an Issue to the warning stream
| issue_ptr | the issue to send |
Definition at line 207 of file StreamFactory.cxx.
|
static |
sends an issue to the warning stream
|
static |
sends an issue to the warning stream
| void ers::StreamFactory::write_to | ( | std::ostream & | stream | ) | const |
write content of factory to stream
Writes a description of the factory to a stream. This method gives a list of all registered stream types.
| stream | the stream to write into |
Definition at line 371 of file StreamFactory.cxx.
| void ers::StreamFactory::write_to | ( | std::ostream & | stream | ) | const |
write content of factory to stream
| void ers::StreamFactory::write_to | ( | std::ostream & | stream | ) | const |
write content of factory to stream
|
staticprotected |
keys for default streams
This variable contains the default keys for building the default streams. The default is to use the default stream, in verbose mode for errors and fatals.
Definition at line 21 of file Event/ers/include/ers/StreamFactory.h.
Referenced by key_for_severity().
|
protected |
collection of factories to build streams
Definition at line 157 of file Event/ers/include/ers/StreamFactory.h.
Referenced by create_stream(), register_factory(), StreamFactory(), and write_to().
|
protected |
array of pointers to streams per severity_t
Definition at line 156 of file Event/ers/include/ers/StreamFactory.h.
Referenced by get_stream(), set(), StreamFactory(), StreamFactory(), and ~StreamFactory().
|
staticprotected |
singleton instance
Pointer to the singleton instance
Definition at line 146 of file Event/ers/include/ers/StreamFactory.h.
Referenced by instance().