This class provides a mechanism for associating attributes with the current thread, and evaluating the logging rules associated with a category using those stored attributes. AttributeContext contains class data members that must be initialized (using the initialize class method) with a CategoryManager object containing a RuleSet that represents the currently installed logging rules for the process. Clients can obtain the context for the current thread by calling the getContext class method. The addAttributes and removeAttributes methods are used to add and remove collections of attributes from the (thread-local) context object. Finally, AttributeContext provides methods (used primarily by other components in the ball package') to determine the effect of the current logging rules on the logging thresholds of a category. The hasRelevantActiveRules method returns true if there are any relevant and active rules that might modify the logging thresholds of the supplied category. A rule is "relevant" if the rule's pattern matches the category's name, and a rule is "active" if all the attributes defined for the rule are satisfied by the current thread's attributes (i.e., Rule::evaluate returns true for the collection of attributes maintained for the current thread by the thread's AttributeContext object). The determineThresholdLevels method returns the logging threshold levels for a category, factoring in any active rules that apply to the category that might override the category's thresholds. The behavior for the hasRelevantActiveRules and determineThresholdLevels methods is undefined unless initialize has been called. Note that, in practice, initialize is called internally when the logger manager singleton is initialized; clients ordinarily should not call initialize directly.
See ball_attributecontext
Populate the specified levels with the threshold levels for the specified category. This method compares the threshold levels defined by category with those of any active rules that apply to that category, and determines the minimum severity (i.e., the maximum numerical value) for each respective threshold amongst those values. A rule applies to category if the rule's pattern matches category->categoryName(), and a rule is active if all the attributes defined for that rule are satisfied by the current thread's attributes (i.e., Rule::evaluate returns true for the collection of attributes maintained by this object). This method operates on the set of rules maintained by the category manager supplied to the initialize class method (which, in practice, should be the global set of rules for the process). The behavior is undefined unless initialize has previously been invoked without a subsequent call to reset, and category is contained in the registry maintained by the category manager supplied to initialize.
| bool ball::AttributeContext::hasRelevantActiveRules |
( |
const Category * |
category | ) |
const |
Return true if there is at least one rule defined for this process that is both "relevant" to the specified category and "active", and false otherwise. A rule is "relevant" to category if the rule's pattern matches category->categoryName(), and a rule is "active" if all the attributes defined for that rule are satisfied by the current thread's attributes (i.e., Rule::evaluate returns true for the collection of attributes maintained by this object). This method operates on the set of rules maintained by the category manager supplied to the initialize class method (which, in practice, should be the global set of rules for the process). The behavior is undefined unless initialize has previously been invoked without a subsequent call to reset, and category is contained in the registry maintained by the category manager supplied to initialize.
| bsl::ostream & ball::AttributeContext::print |
( |
bsl::ostream & |
stream, |
|
|
int |
level = 0, |
|
|
int |
spacesPerLevel = 4 |
|
) |
| const |
Format this object to the specified output stream at the (absolute value of) the optionally specified indentation level and return a reference to stream. If level is specified, optionally specify spacesPerLevel, the number of spaces per indentation level for this and all of its nested objects. If level is negative, suppress indentation of the first line. If spacesPerLevel is negative, format the entire output on one line, suppressing all but the initial indentation (as governed by level). If stream is not valid on entry, this operation has no effect.