[#BloombergLP-ball]
= xref:BloombergLP.adoc[BloombergLP]::ball
:relfileprefix: ../
:mrdocs:

Package namespace for logging components&period;

== Types

[cols="1,4"]
|===
| Name| Description
| xref:BloombergLP/ball/Administration.adoc[`Administration`] 
| This `struct` provides a namespace for a suite of utility functions that simplifies administration of the `ball` logging subsystem, and insulates administrative clients from changes to lower&hyphen;level components of the `ball` package&period; A precondition common to all of the utility functions is that the logger manager singleton must be initialized and not in the process of being shut down&period;
| xref:BloombergLP/ball/AsyncFileObserver.adoc[`AsyncFileObserver`] 
| This class implements the `Observer` protocol&period; The `publish` method of this class outputs log records asynchronously to `stdout` and optionally to a user&hyphen;specified file&period; This class is thread&hyphen;safe&semi; different threads can operate on an object concurrently&period; This class is exception&hyphen;neutral with no guarantee of rollback&period; In no event is memory leaked&period;
| xref:BloombergLP/ball/AsyncFileObserver_Record.adoc[`AsyncFileObserver&lowbar;Record`] 
| PRIVATE STRUCT&period; For use by the `ball&colon;&colon;AsyncFileObserver` implementation only&period; This `struct` holds a log record and its associated context&period;
| xref:BloombergLP/ball/Attribute.adoc[`Attribute`] 
| An `Attribute` object contains an attribute name which is not managed and an attribute value which is managed&period;
| xref:BloombergLP/ball/AttributeCollectorRegistry.adoc[`AttributeCollectorRegistry`] 
| This component maintains a registry of named functors (&quot;collectors&quot;) that are used to transform opaque user data into a set of `ball&colon;&colon;Attribute` objects&period;
| xref:BloombergLP/ball/AttributeContainer.adoc[`AttributeContainer`] 
| This class defines a protocol for a container of attribute values&period; The attribute container provides a `hasValue()` method to determine whether an attribute value is in the container&period;
| xref:BloombergLP/ball/AttributeContainerList.adoc[`AttributeContainerList`] 
| This class provides an in&hyphen;core value&hyphen;semantic list of `AttributeContainer` object addresses&period; Attribute container addresses are added to this list using `pushFront()`, which returns an iterator located at the new element&period; A `AttributeContainerList&colon;&colon;iterator` object remains valid until the element referred to by the iterator is removed&period; Attribute container addresses can be removed using either `remove()`, `removeAll()`, or `removeAllAndRelease()`&period; This list object attempts to minimize the number of memory allocations it requires by placing the memory for elements that have been released in a free memory store, and re&hyphen;using the memory when new elements are added&period; The `removeAll()` removes all the elements from the list, but does not release any allocated memory (placing it in the free store)&period; The `removeAllAndRelease()` operation removes all elements and releases all allocated memory&period; Note that maintaining a free store is important for this component because the expectation is that elements will be both added and removed frequently&period;
| xref:BloombergLP/ball/AttributeContainerListIterator.adoc[`AttributeContainerListIterator`] 
| This class provides an STL&hyphen;style iterator over a sequence of `AttributeContainer` object addresses&period; The behavior of the `operator&ast;` method is undefined unless the iterator is at a valid position in the sequence of `AttributeContainer` object addresses (i&period;e&period;, not the &quot;end&quot;) and the referenced element has not been removed since the iterator was constructed&period;
| xref:BloombergLP/ball/AttributeContainerList_Node.adoc[`AttributeContainerList&lowbar;Node`] 
| This is an implementation type of `AttributeContainerList` and should not be used by clients of this package&period; A `AttributeContainerList&lowbar;Node` represents a node in a `AttributeContainerList` object&period;
| xref:BloombergLP/ball/AttributeContext.adoc[`AttributeContext`] 
| 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&period; `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&period; Clients can obtain the context for the current thread by calling the `getContext` class method&period; The `addAttributes` and `removeAttributes` methods are used to add and remove collections of attributes from the (thread&hyphen;local) context object&period; Finally, `AttributeContext` provides methods (used primarily by other components in the `ball` package&apos;) to determine the effect of the current logging rules on the logging thresholds of a category&period; The `hasRelevantActiveRules` method returns `true` if there are any relevant and active rules that might modify the logging thresholds of the supplied category&period; A rule is &quot;relevant&quot; if the rule&apos;s pattern matches the category&apos;s name, and a rule is &quot;active&quot; if all the attributes defined for the rule are satisfied by the current thread&apos;s attributes (i&period;e&period;, `Rule&colon;&colon;evaluate` returns `true` for the collection of attributes maintained for the current thread by the thread&apos;s `AttributeContext` object)&period; 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&apos;s thresholds&period; The behavior for the `hasRelevantActiveRules` and `determineThresholdLevels` methods is undefined unless `initialize` has been called&period; Note that, in practice, `initialize` is called _internally_ when the logger manager singleton is initialized&semi; clients ordinarily should not call `initialize` directly&period;
| xref:BloombergLP/ball/AttributeContextProctor.adoc[`AttributeContextProctor`] 
| This class implements a proctor that, on its own destruction, will destroy the attribute context of the current thread&period; Attribute contexts are stored in thread&hyphen;local memory&period; On destruction, objects of this type will deallocate the current thread&apos;s attribute context (if one has been created), and set the thread&hyphen;local storage pointer to 0&period;
| xref:BloombergLP/ball/AttributeContext_RuleEvaluationCache.adoc[`AttributeContext&lowbar;RuleEvaluationCache`] 
| This is an implementation type of `AttributeContext` and should not be used by clients of this package&period; A rule evaluation cache is a mechanism for evaluating and caching whether a rule is active&period; A rule is considered active if all of its attributes are satisfied by the collection of attributes held in a `AttributeContainerList` object (i&period;e&period;, `Rule&colon;&colon;evaluate` returns `true` for the `AttributeContainerList` object)&period; The rules this cache evaluates are contained in a `RuleSet` object&period; `RuleSet&colon;&colon;MaskType` is a bit mask for a rule set, where each bit is a boolean value associated with the rule at the corresponding index in a rule set&period; An `AttributeContext` determines, using the `isDataAvailable` method, if a particular set of rules (described using a bit mask) have already been evaluated&period; A context accesses the current cache of rule evaluations using the `knownActiveRules` method&period; Finally, a context updates the cache of rule evaluations using the `update` method&period; Note that the `isDataAvailable` method should be used prior to using `knownActiveRules` in order to ensure the relevant rules have been evaluated and that those evaluations are up&hyphen;to&hyphen;date&period;
| xref:BloombergLP/ball/BroadcastObserver.adoc[`BroadcastObserver`] 
| This class provides a broadcasting implementation of the `Observer` protocol&period; Other concrete observers may be registered and named with this broadcast observer (`registerObserver` method), retrieved (`findObserver` method), and unregistered (`deregisterObserver` method)&period; The `publish` method of this class forwards the log records that it receives to the `publish` method of each registered observer&period;
| xref:BloombergLP/ball/Category.adoc[`Category`] 
| This class provides a container to hold the name and threshold levels of a category&period; Instances of `Category` are created and manipulated by `CategoryManager`&period; All threshold levels are integral values in the range `&lsqb;0 &period;&period; 255&rsqb;`&period;
| xref:BloombergLP/ball/CategoryCallbacks.adoc[`CategoryCallbacks`] 
| This struct provides a namespace for default threshold level related callback function types&period;
| xref:BloombergLP/ball/CategoryHolder.adoc[`CategoryHolder`] 
| This class, informally referred to as a &quot;category holder&quot; (or simply &quot;holder&quot;), holds a category, a threshold level, and a pointer to a &quot;next&quot; holder&period; Both the category and next pointer may be null&period; The intended use is as follows&colon; (1) instances of this class are (only) declared in contexts where logging occurs&semi; (2) if the held category is non&hyphen;null, then the held threshold is the numerical maximum of the four levels of that category&semi; (3) if the next pointer is non&hyphen;null, then the holder pointed to holds the same category and threshold&period; Instances of this class must be _statically_ initializable&period; Hence, the data members are `public`, and automatically generated constructors and destructor are used&period;
| xref:BloombergLP/ball/CategoryManager.adoc[`CategoryManager`] 
| This class manages a set (or &quot;registry&quot;) of categories&period; Categories may be added to the registry, but they cannot be removed&period; However, the threshold levels of existing categories may be accessed and modified directly&period;
| xref:BloombergLP/ball/CategoryManagerImpUtil.adoc[`CategoryManagerImpUtil`] 
| This class provides a suite of free functions used to help implement a manager of categories and category holders&period;
| xref:BloombergLP/ball/CategoryManagerIter.adoc[`CategoryManagerIter`] 
| This class defines an iterator providing sequential, read&hyphen;only access to the categories in the registry of a category manager&period; The order of the iteration is undefined&period;
| xref:BloombergLP/ball/CategoryManagerManip.adoc[`CategoryManagerManip`] 
| This class defines an iterator providing sequential, modifiable access to the categories in the registry of a category manager&period; The order of the iteration is undefined&period;
| xref:BloombergLP/ball/CategoryManager_RadixTree.adoc[`CategoryManager&lowbar;RadixTree`] 
| This class template implements a space&hyphen;efficient associative container that maps string keys to values of the specified `t&lowbar;VALUE` type&period; The container uses a radix tree (compressed trie) data structure, which shares common prefixes among keys&period; The container provides O(k) insertion, lookup, and removal operations, where k is the key length&period;
| xref:BloombergLP/ball/CategoryManager_RadixTree_ChildNodeGuard.adoc[`CategoryManager&lowbar;RadixTree&lowbar;ChildNodeGuard`] 
| RAII guard to remove a child node when an exception is thrown during value emplacement in a `CategoryManager&lowbar;RadixTree&lowbar;Node`&period; This guard ensures exception safety by automatically removing a newly created child node from its parent if the value construction throws an exception&period;
| xref:BloombergLP/ball/CategoryManager_RadixTree_Node.adoc[`CategoryManager&lowbar;RadixTree&lowbar;Node`] 
| This class template represents a node in the radix tree&period; Each node stores a prefix string, an optional value, and child nodes mapped with their prefix&hyphen;part starting character&period; As the second underscore in the class name indicates, this is a component&hyphen;local class not intended for use outside of
| xref:BloombergLP/ball/Context.adoc[`Context`] 
| This class provides a container for aggregating the auxiliary information needed to transmit a log record&period; For each context attribute in this class (e&period;g&period;, `recordIndex`), there is an accessor for obtaining the attribute&apos;s value (`recordIndex`) and there are manipulators for changing the contained attribute values (`setAttributes` checks attribute constraints&semi; `setAttributesRaw` and `setRecordIndexRaw` do not)&period; A static `isValid` method is also provided to verify that particular attribute values are consistent before they are used to create or modify a context object&period; Note that it is the client&apos;s responsibility not to construct or unilaterally modify a context object to hold incompatible attribute values&period;
| xref:BloombergLP/ball/CountingAllocator.adoc[`CountingAllocator`] 
| This class maintains a count of the total number of allocated bytes&period; The running byte count is initialized to 0 upon construction, is increased by the `allocate` method, and may be reset to 0 by the `resetNumBytesTotal` method&period; The `deallocate` method appropriately decrement the byte count&period; The precise definition of byte count is described in the &quot;Byte Count&quot; section of the component&hyphen;level documentation&period;
| xref:BloombergLP/ball/CstdioObserver.adoc[`CstdioObserver`] 
| This class provides a concrete implementation of the `Observer` protocol&period; The `publish` method of this class outputs the log records that it receives to a `FILE &ast;` supplied at construction and then flushes the stream&period;
| xref:BloombergLP/ball/DefaultAttributeContainer.adoc[`DefaultAttributeContainer`] 
| A `DefaultAttributeContainer` object contains a collection of (unique) attributes values&period;
| xref:BloombergLP/ball/FileObserver.adoc[`FileObserver`] 
| This class implements the `Observer` protocol&period; The `publish` method of this class outputs the log records that it receives to `stdout` and optionally to a user&hyphen;specified file&period; This class is thread&hyphen;safe&semi; different threads can operate on an object concurrently&period; This class is exception&hyphen;neutral with no guarantee of rollback&period; In no event is memory leaked&period;
| xref:BloombergLP/ball/FileObserver2.adoc[`FileObserver2`] 
| This class implements the `Observer` protocol&period; The `publish` method of this class outputs the log records that it receives to a user&hyphen;specified file&period; This class is thread&hyphen;safe&semi; different threads can operate on an object concurrently&period; This class is exception&hyphen;neutral with no guarantee of rollback&period; In no event is memory leaked&period;
| xref:BloombergLP/ball/FilteringObserver.adoc[`FilteringObserver`] 
| This class provides a concrete implementation of the `Observer` protocol that filters the `Record` and `Context` objects passed to its `publish` method based on a callback (function or functor) supplied at construction&period; The callback must be convertible to&colon; &grave; bsl&colon;&colon;function&lt;bool(const Record&amp;, const Context&amp;)&gt; &grave; If the callback returns `true` for the `Record` and `Context`, then they are forwarded to the `publish` method of an observer also supplied at construction&period; If the callback returns `false`, then the `Record` and `Context` are ignored (i&period;e&period;, they are filtered out by this observer)&period;
| xref:BloombergLP/ball/FixedSizeRecordBuffer.adoc[`FixedSizeRecordBuffer`] 
| This class provides a concrete, thread&hyphen;safe implementation of the `RecordBuffer` protocol&period; This class is a mechanism&period; At any time, the sum of sizes of all records contained in a `FixedSizeRecordBuffer` object _plus_ the amount of memory allocated by the `FixedSizeRecordBuffer` object itself is guaranteed to be less than or equal to an upper bound specified at creation&period; The class is thread&hyphen;safe, except that the methods `front` and `back` must be called after locking the buffer by invoking `beginSequence`&period; In order to accommodate a `pushBack` request, the records from the front end of the buffer may be removed&period; Similarly, in order to accommodate a `pushFront` request, the records from the back end of the buffer may be removed&period; If a record can not accommodate in the buffer, it is silently (but otherwise safely) discarded&period;
| xref:BloombergLP/ball/HierarchicalCategorySetting.adoc[`HierarchicalCategorySetting`] 
| This class represents a hierarchical category setting that consists of a category name prefix and 4 threshold level settings for categories whose name starts with that prefix&period; Instances of `HierarchicalCategorySetting` are created and manipulated by `LoggerManager`&period; All threshold levels are integral values in the range `&lsqb;0 &period;&period; 255&rsqb;`&period;
| xref:BloombergLP/ball/Log.adoc[`Log`] 
| This `struct` provides a namespace for a suite of utility functions that simplify usage of the `ball&lowbar;loggermanager` component&period; The direct use of these utility functions is _strongly_ discouraged&period;
| xref:BloombergLP/ball/LogFileCleanerUtil.adoc[`LogFileCleanerUtil`] 
| This utility class provides functions for converting log file patterns and for cleaning up log files based on a configuration&period;
| xref:BloombergLP/ball/Log_Formatter.adoc[`Log&lowbar;Formatter`] 
| This class provides an aggregate of several objects relevant to the logging of a message via the `printf`&hyphen;style macros&colon; &grave; &hyphen; record to be logged &hyphen; category to which to log the record &hyphen; severity at which to log the record &hyphen; buffer in which the user log message is formatted &grave; As a side&hyphen;effect of creating an object of this class, the record is constructed, and the buffer is obtained&period; As a side&hyphen;effect of destroying the object, the record is formatted, using the buffer, and logged&period;
| xref:BloombergLP/ball/Log_Stream.adoc[`Log&lowbar;Stream`] 
| This class provides an aggregate of several objects relevant to the logging of a message via the C&plus;&plus; stream&hyphen;based macros&colon; &grave; &hyphen; record to be logged &hyphen; category to which to log the record &hyphen; severity at which to log the record &hyphen; stream to which the user log message is put &grave; As a side&hyphen;effect of creating an object of this class, the record and stream are also constructed&period; As a side&hyphen;effect of destroying the object, the record is logged&period;
| xref:BloombergLP/ball/Logger.adoc[`Logger`] 
| This class provides log record management services&period; Each instance of `Logger` receives log records from one or more clients, manages the storage of those records, and transmits them to a registered recipient (i&period;e&period;, an observer) when appropriate&period;
| xref:BloombergLP/ball/LoggerCategoryUtil.adoc[`LoggerCategoryUtil`] 
| This struct provides a suite of utility functions that facilitate the management of the categories in `LoggerManager`&period;
| xref:BloombergLP/ball/LoggerFunctorPayloads.adoc[`LoggerFunctorPayloads`] 
| This `struct` provides a namespace for a suite of utility functions, each of which may be used as the function body for an appropriate `bsl&colon;&colon;function` callback functor within `ball&lowbar;loggermanager`&period;
| xref:BloombergLP/ball/LoggerManager.adoc[`LoggerManager`] 
| This class is _usually_ a singleton&period; It provides a factory for `Logger` objects and is also a wrapper for category administration services&period; Note that some services provided by this class are available only after the singleton has been initialized&period;
| xref:BloombergLP/ball/LoggerManagerCategoryIter.adoc[`LoggerManagerCategoryIter`] 
| This class defines an iterator providing sequential, read&hyphen;only access to the categories in the registry of a logger manager&apos;s category manager&period; The order of the iteration is undefined&period;
| xref:BloombergLP/ball/LoggerManagerCategoryManip.adoc[`LoggerManagerCategoryManip`] 
| This class defines an iterator providing sequential, modifiable access to the categories in the registry of a logger manager&apos;s category manager&period; The order of the iteration is undefined&period;
| xref:BloombergLP/ball/LoggerManagerConfiguration.adoc[`LoggerManagerConfiguration`] 
| This class provides constrained configuration parameters for a logger manager&period; The constraints are maintained as class invariants&semi; it is not possible to obtain an invalid object through this interface&period;
| xref:BloombergLP/ball/LoggerManagerDefaults.adoc[`LoggerManagerDefaults`] 
| This class provides constrained configuration parameters for a logger manager&period; The constraints are maintained as class invariants&semi; it is not possible to obtain an invalid object through this interface&period;
| xref:BloombergLP/ball/LoggerManagerScopedGuard.adoc[`LoggerManagerScopedGuard`] 
| This class implements a scoped guard that, on construction, creates the logger manager singleton, and, on destruction, destroys the singleton&period;
| xref:BloombergLP/ball/ManagedAttribute.adoc[`ManagedAttribute`] 
| A `ball&colon;&colon;ManagedAttribute` object contains a `ball&colon;&colon;Attribute` object and provides storage for the attribute&apos;s name&period;
| xref:BloombergLP/ball/ManagedAttributeSet.adoc[`ManagedAttributeSet`] 
| This class implements a value&hyphen;semantic collection of unique attributes&period; (Note that an attribute is a compound entity that, as a whole, must be unique although individual parts need not be&period;) Additionally, the `evaluate` accessor can be used to determine if every attribute in the set is present in the specified attribute container list&period;
| xref:BloombergLP/ball/MultiplexObserver.adoc[`MultiplexObserver`] 
| This class provides a multiplexing implementation of the `Observer` protocol&period; Other concrete observers may be registered with a multiplexing observer (`registerObserver` method) and later unregistered (`deregisterObserver` method)&period; The `publish` method of this class forwards the log records that it receives to the `publish` method of each registered observer&period;
| xref:BloombergLP/ball/Observer.adoc[`Observer`] 
| This class provides a protocol for receiving and processing log record output&period;
| xref:BloombergLP/ball/ObserverAdapter.adoc[`ObserverAdapter`] 
| This class aids in the implementation of the `Observer` protocol by allowing clients to implement that protocol by implementing a single method signature&colon; `publish(const Record&amp;, const Context&amp;)`&period;
| xref:BloombergLP/ball/ObserverFormatterImp.adoc[`ObserverFormatterImp`] 
| This class provides a common implementation of formatting&hyphen;related methods for observer components that support scheme&hyphen;based log record formatting&period; It manages a log record formatter, format configuration strings, and time zone preferences&period; This implementation is intended to be used as a data member in concrete observer classes to provide consistent formatting behavior across different observer types&period;
| xref:BloombergLP/ball/PatternUtil.adoc[`PatternUtil`] 
| This utility class provides functions relating to pattern matching for strings&period;
| xref:BloombergLP/ball/Record.adoc[`Record`] 
| Forward declaration of the log record type published by observers&period;
| xref:BloombergLP/ball/RecordAttributes.adoc[`RecordAttributes`] 
| This class provides a container for a fixed set of attributes appropriate for logging&period; For each attribute in this class (e&period;g&period;, `category`), there is an accessor for obtaining the attribute&apos;s value (the `category` accessor) and a manipulator for changing the attribute&apos;s value (the `setCategory` manipulator)&period;
| xref:BloombergLP/ball/RecordBuffer.adoc[`RecordBuffer`] 
| Provide a protocol (or pure interface) for managing record handles (specifically instances of `bsl&colon;&colon;shared&lowbar;ptr&lt;Record&gt;`)&period;
| xref:BloombergLP/ball/RecordFormatterFunctor.adoc[`RecordFormatterFunctor`] 
| This struct provides a namespace for a typedef of the functor used for formatting log records to a stream&period;
| xref:BloombergLP/ball/RecordFormatterOptions.adoc[`RecordFormatterOptions`] 
| This class provides a value&hyphen;semantic type for representing options used to configure log record formatters&period; These options are supplemental to the format specification string and affect how certain fields in log records are rendered&period; Currently, the only supported option is `timezoneDefault`, which controls whether timestamps are displayed in UTC or local time&period;
| xref:BloombergLP/ball/RecordFormatterRegistryUtil.adoc[`RecordFormatterRegistryUtil`] 
| This utility provides a namespace for functions to create log record formatters based on URI&hyphen;like scheme identifiers&period;
| xref:BloombergLP/ball/RecordFormatterTimezone.adoc[`RecordFormatterTimezone`] 
| This struct provides a namespace for enumerating timezone values for timestamps in record formatters&period;
| xref:BloombergLP/ball/RecordJsonFormatter.adoc[`RecordJsonFormatter`] 
| This class provides a function object that formats a log record as JSON text elements and renders them to an output stream&period; The overloaded `operator()` provided by the class formats log record according to a message format specification supplied either by `setJsonFormat` or `setSimplifiedFormat` manipulator or the default format installed by the constructor) and outputs the result to the stream&period; While this functor type is designed to match the function signature expected by many concrete `ball&colon;&colon;Observer` implementations that publish log records (for example, see `ball&colon;&colon;FileObserver2&colon;&colon;setLogFileFunctor`) it is advised to use the more flexible scheme&hyphen;based format selection provided now by every BDE&hyphen;made observer&period;
| xref:BloombergLP/ball/RecordJsonFormatter_FieldFormatter.adoc[`RecordJsonFormatter&lowbar;FieldFormatter`] 
| Forward declaration for a field formatter used by `RecordJsonFormatter`&period;
| xref:BloombergLP/ball/RecordStringFormatter.adoc[`RecordStringFormatter`] 
| This class provides a value&hyphen;semantic log record formatter that holds a `printf`&hyphen;style format specification and a timestamp offset&period; The overloaded `operator()` provided by the class formats a given record according to the format specification and outputs the formatted result to a given stream&period; The timestamp offset of the record formatter is added to each timestamp that is output to the stream&period;
| xref:BloombergLP/ball/Rule.adoc[`Rule`] 
| This class defines a value&hyphen;semantic object that holds a pattern, four threshold levels, and an attribute set&period; For each of these fields there is an accessor for obtaining the field value and a manipulator for changing that value&period; There are a few methods as well for directly adding&sol;removing&sol;searching attributes&period;
| xref:BloombergLP/ball/RuleSet.adoc[`RuleSet`] 
| This class manages a set of unique rule values&period; Rules may be added to or removed from the set&semi; however, rules having duplicate values will not be added&period; For the definition of two rules having the same value, please refer to the function&hyphen;level documentation associated with the `Rule&colon;&colon;operator&equals;&equals;` function&period;
| xref:BloombergLP/ball/ScopedAttribute.adoc[`ScopedAttribute`] 
| This class provides a scoped guard that sets a single BALL attribute in the current thread&period;
| xref:BloombergLP/ball/ScopedAttribute_Container.adoc[`ScopedAttribute&lowbar;Container`] 
| This component&hyphen;private class is a concrete implementation of the `AttributeContainer` protocol for a single attribute&period;
| xref:BloombergLP/ball/ScopedAttributes.adoc[`ScopedAttributes`] 
| This class installs a `AttributeContainer` object in the current attribute context on construction, and removes it on destruction&period; Note that the `AttributeContainer` supplied at construction must remain valid and *unmodified* for the lifetime of this object&period;
| xref:BloombergLP/ball/Severity.adoc[`Severity`] 
| This struct provides a namespace for enumerating severity levels&period;
| xref:BloombergLP/ball/SeverityUtil.adoc[`SeverityUtil`] 
| This `struct` provides a namespace for non&hyphen;primitive procedures on the `Severity&colon;&colon;Level` enumeration&period;
| xref:BloombergLP/ball/StreamObserver.adoc[`StreamObserver`] 
| This class provides a concrete implementation of the `Observer` protocol&period; The `publish` method of this class outputs the log records that it receives to an instance of `bsl&colon;&colon;ostream` supplied at construction&period;
| xref:BloombergLP/ball/TestObserver.adoc[`TestObserver`] 
| This class provides an instrumented implementation of the `Observer` protocol suitable for testing systems that use `Observer`&period; Each instance receives a unique (per process) integer identifier at construction, and keeps count of the number of records that it has published, as well as the contents of the most recently published record and context&period;
| xref:BloombergLP/ball/ThresholdAggregate.adoc[`ThresholdAggregate`] 
| This class implements an aggregate of the four logging threshold levels&period;
| xref:BloombergLP/ball/ThresholdAggregateUtil.adoc[`ThresholdAggregateUtil`] 
| This class provides helper methods for working with `ball&colon;&colon;ThresholdAggregate` objects&period;
| xref:BloombergLP/ball/ThresholdDefaults.adoc[`ThresholdDefaults`] 
| This struct provides a namespace for default threshold level related constants&period;
| xref:BloombergLP/ball/Transmission.adoc[`Transmission`] 
| This struct provides a namespace for enumerating the causes of the transmission of a log record&period;
| xref:BloombergLP/ball/UserFieldType.adoc[`UserFieldType`] 
| This `struct` provides a namespace for enumerating month&hyphen;of&hyphen;year values&period; See `Enum` in the TYPES sub&hyphen;section for details&period;
| xref:BloombergLP/ball/UserFieldValue.adoc[`UserFieldValue`] 
| This class implements a value&hyphen;semantic type for representing the value of a user field in a log record&period; A user field value acts as a discriminated union, and may represent a value of any of the types described in `ball&colon;&colon;UserFieldType` or an unset value (indicated by type `ball&colon;&colon;UserFieldType&colon;&colon;e&lowbar;VOID`)&period;
| xref:BloombergLP/ball/UserFields.adoc[`UserFields`] 
| This class implements a value&hyphen;semantic type for representing a sequence of (randomly accessible) user field values&period;
|===


== Type Aliases

[cols="1,4"]
|===
| Name| Description
| xref:BloombergLP/ball/Predicate.adoc[`Predicate`] 
| DEPRECATED&colon; Use `ball&colon;&colon;ManagedAttribute` instead&period;
| xref:BloombergLP/ball/PredicateSet.adoc[`PredicateSet`] 
| DEPRECATED&colon; Use `ball&colon;&colon;ManagedAttributeSet` instead&period;
|===


== Functions

[cols="1,4"]
|===
| Name| Description
| xref:BloombergLP/ball/ball_log_getCategoryHolder.adoc[`ball&lowbar;log&lowbar;getCategoryHolder`] 
| Return the address of the specified `categoryHolder`&period; Note that this function facilitates consistent lookup of block&hyphen;scope and class&hyphen;scope category holders (see &quot;Logging Macro Reuse&quot; in the &quot;IMPLEMENTATION NOTES&quot; of the component implementation file for details)&period;
| xref:BloombergLP/ball/swap-0b.adoc[`swap`] 
| `swap` overloads
| xref:BloombergLP/ball/operator_lshift-003.adoc[`operator&lt;&lt;`] 
| Stream insertion operators
| xref:BloombergLP/ball/operator_eq-06.adoc[`operator&equals;&equals;`] 
| Equality operators
| xref:BloombergLP/ball/operator_not_eq-03b.adoc[`operator!&equals;`] 
| Inequality operators
|===



[.small]#Created with https://www.mrdocs.com[MrDocs]#
