X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FLogger%2FConfig.hh;h=9f0f73541b202cc46897aad2b559ff02446f098c;hb=1e4e4f0d4cdba4ba8b3f7f73849b7e0dc52e2d46;hp=80d02cb694437da0c132b713debd6c6f9e6a7761;hpb=6a9425b523ea9a2bd41103dd10659ac8c7c0d080;p=senf.git diff --git a/Utils/Logger/Config.hh b/Utils/Logger/Config.hh index 80d02cb..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" @@ -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 |