From 3a515774ceda1efda22d22a476e2721b301dcf48 Mon Sep 17 00:00:00 2001 From: "Charles E. Rolke" Date: Fri, 26 Apr 2013 21:38:07 +0000 Subject: QPID-4651: C++ Broker add --log-disable option Reviewed at https://reviews.apache.org/r/10799/ git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1476409 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/include/qpid/log/Options.h | 1 + cpp/include/qpid/log/Selector.h | 75 ++++++++++++++++++++++------------------- 2 files changed, 41 insertions(+), 35 deletions(-) (limited to 'cpp/include') diff --git a/cpp/include/qpid/log/Options.h b/cpp/include/qpid/log/Options.h index 819f2c85f1..42a8fb40fe 100644 --- a/cpp/include/qpid/log/Options.h +++ b/cpp/include/qpid/log/Options.h @@ -39,6 +39,7 @@ struct Options : public qpid::Options { std::string argv0; std::string name; std::vector selectors; + std::vector deselectors; bool time, level, thread, source, function, hiresTs, category; bool trace; std::string prefix; diff --git a/cpp/include/qpid/log/Selector.h b/cpp/include/qpid/log/Selector.h index 498d4a7342..23b6818cf0 100644 --- a/cpp/include/qpid/log/Selector.h +++ b/cpp/include/qpid/log/Selector.h @@ -27,6 +27,22 @@ namespace qpid { namespace log { struct Options; +/** + * SelectorElement parses a cli/mgmt enable/disable entry into usable fields + * where cliEntry = [!]LEVEL[+-][:PATTERN] + */ +struct SelectorElement { + SelectorElement(const std::string cliEntry); + std::string levelStr; + std::string patternStr; + Level level; + Category category; + bool isDisable; + bool isCategory; + bool isLevelAndAbove; + bool isLevelAndBelow; +}; + /** * A selector identifies the set of log messages to enable. * @@ -35,56 +51,45 @@ struct Options; class Selector { public: /** Empty selector selects nothing */ - Selector() { - reset(); - } + Selector(); /** Set selector from Options */ QPID_COMMON_EXTERN Selector(const Options&); /** Equavlient to: Selector s; s.enable(l, s) */ - Selector(Level l, const std::string& s=std::string()) { - reset(); - enable(l,s); - } + Selector(Level l, const std::string& s=std::string()); - Selector(const std::string& enableStr) { - reset(); - enable(enableStr); - } + /** Selector from string */ + Selector(const std::string& selector); - /** - * Enable messages with level in levels where the file - * name contains substring. Empty string matches all. - */ - void enable(Level level, const std::string& substring=std::string()) { - substrings[level].push_back(substring); - } + /** push option settings into runtime lookup structs */ + QPID_COMMON_EXTERN void enable(const std::string& enableStr); + QPID_COMMON_EXTERN void disable(const std::string& disableStr); /** - * Enable messages at this level for this category + * Enable/disable messages with level in levels where the file + * name contains substring. Empty string matches all. */ - void enable(Level level, Category category) { - catFlags[level][category] = true; - } - - /** Enable based on a 'level[+]:file' string */ - QPID_COMMON_EXTERN void enable(const std::string& enableStr); + void enable(Level level, const std::string& substring=std::string()); + void disable(Level level, const std::string& substring=std::string()); - /** True if level is enabled for file. */ + /** Tests to determine if function names are in enable/disable tables */ QPID_COMMON_EXTERN bool isEnabled(Level level, const char* function); - QPID_COMMON_EXTERN bool isEnabled(Level level, const char* function, Category category); + QPID_COMMON_EXTERN bool isDisabled(Level level, const char* function); - /** Reset the category enable flags */ - QPID_COMMON_EXTERN void reset() { - for (int lt = 0; lt < LevelTraits::COUNT; ++lt) - for (int ct = 0; ct < CategoryTraits::COUNT; ++ct) - catFlags[lt][ct] = false; - } + /** Test to determine if log Statement is enabled */ + QPID_COMMON_EXTERN bool isEnabled(Level level, const char* function, Category category); private: - std::vector substrings[LevelTraits::COUNT]; - bool catFlags[LevelTraits::COUNT][CategoryTraits::COUNT]; + typedef std::vector FunctionNameTable [LevelTraits::COUNT]; + FunctionNameTable enabledFunctions; // log function names explicitly enabled + FunctionNameTable disabledFunctions; // log function names explicitly disabled + bool enableFlags[LevelTraits::COUNT][CategoryTraits::COUNT]; + bool disableFlags[LevelTraits::COUNT][CategoryTraits::COUNT]; + + bool lookupFuncName(Level level, const char* function, FunctionNameTable& table); + /** Reset the category enable flags */ + QPID_COMMON_EXTERN void reset(); }; -- cgit v1.2.1