X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FLogger%2FConfig.hh;h=9f0f73541b202cc46897aad2b559ff02446f098c;hb=5746957b0da2bb228b9284e9493158c113b2bbe0;hp=ac51c7ae8d42b3bd6d71f4dd0373047713a5cfdc;hpb=a1a6c76a214ad1935032826713cabaf9ac57bf07;p=senf.git diff --git a/Utils/Logger/Config.hh b/Utils/Logger/Config.hh index ac51c7a..9f0f735 100644 --- a/Utils/Logger/Config.hh +++ b/Utils/Logger/Config.hh @@ -23,8 +23,8 @@ /** \file \brief Config public header */ -#ifndef HH_Config_ -#define HH_Config_ 1 +#ifndef HH_SENF_Utils_Logger_Config_ +#define HH_SENF_Utils_Logger_Config_ 1 // Custom includes #include "Levels.hh" @@ -46,7 +46,7 @@ Runtime configuration on the other hand deals with routing all those messages, which are enabled at compile time to the logging targets. If a message is not routed, it will be discarded. This allows to additionally disable messages at run-time. Message routing is managed - via the \ref Targets interface. + via the ::Target interface. \section config_compile Compile time configuration @@ -54,16 +54,42 @@
g++ ... -DSENF_LOG_CONF="(( (senf)(log)(Debug),(_),DISABLED )) (( (senf)(log)(Debug),(foo)(SomeClass),VERBOSE )) - (( (foo)(Transactions),(_),NOTICE ))" ... + (( (_),(_),NOTICE ))" ...The value is relatively complex; It's a Boost.Preprocessor style sequence of tuples, of which the first and second elements are again sequences. What this boils down to, is that it allows to - configure compile time logging limits based on stream and optional area. + configure compile time logging limits based on stream and optional area. The above example disables all debug logging by setting the default log limit for all areas on - the \c senf::log::Debug stream to \c DISABLED. It then re-enables debug logging only within the - \c foo::SomeClass area, where it is set to \c VERBOSE. Furthermore, the limit on the \c - foo::Transactions stream is set to \c NOTICE. + the \c senf::log::Debug stream to \c DISABLED. It enables debug logging only within the \c + foo::SomeClass area, where it is set to \c VERBOSE. Lastly, the global compile time limit is set + to \c NOTICE. + + There are two standard uses for this configuration: Either to disable most logging in final + builds by changing the compile time limit to something like senf::log::IMPORTANT or to enable + senf::log::VERBOSE messages for some area: +
+ # Disable debug logging below 'IMPORTANT' level + g++ ... -DSENF_LOG_CONF="(( (senf)(log)(Debug), (_), IMPORTANT ))" + + # Or enable verbose messages for the 'some::Area' area + g++ ... -DSENF_LOG_CONF="(( (senf)(log)(Verbose), (some)(Area), VERBOSE ))" ++ + All the entries specified via \c SENF_LOG_CONF are applied in a fixed order: + + \li First the entries which have both a stream and an area specified are checked + \li next all entries with area but no stream given are checked + \li followed by all entries with a given stream but no area + \li and lastly if no match was found until now, a generic entry without stream and area is + checked + \li if no matching entry is found, the default compile time limit of the stream is used + + So an area specification has precedence over a stream specification. + + \warning Enabling a message at compile time does \e not ensure, the message is shown. You + additionally need to \e route the message (see next chapter). This is especially true for \c + VERBOSE messages, which are default disabled at runtime. \see \ref SENF_LOG_CONF @@ -71,8 +97,8 @@ The runtime configuration is performed by routing messages to one or more logging targets: \code - senf::log::ConsoleLog & consoleLog (senf::log::ConsoleLog::instance()); - senf::log::FileLog fileLog ("my.log"); + senf::log::ConsoleTarget & consoleLog (senf::log::ConsoleTarget::instance()); + senf::log::FileTarget fileLog ("my.log"); consoleLog.route
conf | ::= \e element \e element* \n |
element | ::= (( \e stream , \e optional_area , \e level )) \n |
stream | ::= \e scope_seq \n |
optional_area | ::= (_) | \e scope_seq \n |
level | ::= \c VERBOSE | \c NOTICE | \c MESSAGE | \c IMPORTANT | \c CRITICAL | \c DISABLED \n |
scope_seq | ::= \e scope \e scope \e scope* \n |
scope | ::= ( \e name ) \n |
name | ::= arbitrary C++ identifier |
conf | ::= \e element \e element* \n |
element | ::= (( \e optional_stream , \e optional_area , \e level )) \n |
optional_stream | ::= (_) | \e scope_seq \n |
optional_area | ::= (_) | \e scope_seq \n |
level | ::= \c VERBOSE | \c NOTICE | \c MESSAGE | \c IMPORTANT | \c CRITICAL | \c DISABLED \n |
scope_seq | ::= \e scope \e scope* \n |
scope | ::= ( \e name ) \n |
name | ::= arbitrary C++ identifier |