[#BloombergLP-ball-AttributeContext] = xref:BloombergLP.adoc[BloombergLP]::xref:BloombergLP/ball.adoc[ball]::AttributeContext :relfileprefix: ../../ :mrdocs: Mechanism for associating attributes with the current thread and evaluating logging rules. == Synopsis Declared in `<ball_attributecontext.h>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class AttributeContext; ---- == Description 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. == Type Aliases [cols="1,4"] |=== | Name| Description | xref:BloombergLP/ball/AttributeContext/iterator.adoc[`iterator`] | Iterator over the attribute containers in an `AttributeContext`. |=== == Member Functions [cols="1,4"] |=== | Name| Description | xref:BloombergLP/ball/AttributeContext/addAttributes.adoc[`addAttributes`] | Add the specified `attributes` container to this context. | xref:BloombergLP/ball/AttributeContext/clearCache.adoc[`clearCache`] | Clear this object's cache of evaluated rules. | xref:BloombergLP/ball/AttributeContext/containers.adoc[`containers`] | Return the list of attribute containers maintained by this object. | xref:BloombergLP/ball/AttributeContext/determineThresholdLevels.adoc[`determineThresholdLevels`] | Populate the specified `levels` with the threshold levels for the specified `category`. | xref:BloombergLP/ball/AttributeContext/hasAttribute.adoc[`hasAttribute`] | Return whether an attribute with the specified `value` exists in this context. | xref:BloombergLP/ball/AttributeContext/hasRelevantActiveRules.adoc[`hasRelevantActiveRules`] | Return `true` if there is at least one relevant and active rule for the specified `category`. | xref:BloombergLP/ball/AttributeContext/print.adoc[`print`] | Format this object to the specified output stream. | xref:BloombergLP/ball/AttributeContext/removeAttributes.adoc[`removeAttributes`] | Remove the specified `element` from this context's attribute containers. |=== == Static Member Functions [cols="1,4"] |=== | Name| Description | xref:BloombergLP/ball/AttributeContext/getContext.adoc[`getContext`] | Return the address of the current thread's attribute context, creating one if needed. | xref:BloombergLP/ball/AttributeContext/initialize.adoc[`initialize`] | Initialize the static data members of `AttributeContext` using the specified `categoryManager`. | xref:BloombergLP/ball/AttributeContext/lookupContext.adoc[`lookupContext`] | Return the address of the current thread's attribute context, or 0 if none exists. | xref:BloombergLP/ball/AttributeContext/reset.adoc[`reset`] | Reset the static data members of `AttributeContext` to their initial state. | xref:BloombergLP/ball/AttributeContext/visitAttributes.adoc[`visitAttributes`] | Invoke the specified `visitor` for all attributes in all attribute containers maintained by this object. |=== == Friends [cols="1,4"] |=== | Name| Description | `xref:BloombergLP/ball/AttributeContextProctor.adoc[BloombergLP::ball::AttributeContextProctor]` | Proctor that destroys the current thread's attribute context on destruction. |=== [.small]#Created with https://www.mrdocs.com[MrDocs]#