RFR (L): 8046148: JEP 158 Unified JVM Logging
marcus.larsson at oracle.com
Tue Sep 15 09:36:53 UTC 2015
Here is the updated version of the patch, including the feedback and
suggestions from Coleen, David and Ioi.
* New NMT tag 'mtLogging' used by UL
* Added storage allocation classes for all new classes
* Added Log::puts<Level>(const char*) for plain string messages of any
* Fixed broken printf-attribute on Log::write functions
* Moved VM startup timestamp to after os::init
* Formatting and code style changes
On 2015-09-07 15:33, Marcus Larsson wrote:
> Please review the following patch adding the unified logging framework
> to hotspot.
> See the JEP description for a general overview of the new feature.
> Below are some notes on the implementation.
> The patch adds the new 'share/vm/logging' subdirectory containing the
> unified logging framework. The main entry point is log.hpp, which
> contains the necessary macros and definitions to use the framework.
> Log tags are defined/listed in logTag.hpp, and are passed as template
> arguments to the Log class. Every combination of tags used in a log
> call has a corresponding LogTagSet instance, which keeps a track of
> all the outputs it should write the log message to (and their levels).
> Having tags as template arguments allows mapping directly from a set
> of tags to the LogTagSet instance, which means that the overhead for
> disabled logging should be low. Currently each log message can be
> tagged with up to 5 tags, but this can be increased if ever required
> (and with C++11's variadic templates the limit can be removed
> The LogConfiguration class keeps track of configured outputs (stdout,
> stderr, and possible file outputs). Configuration is done either by
> command line arguments (-Xlog) or by DCMD. Both methods will in turn
> use the LogConfiguration class to perform the parsing & configuration.
> This configuration includes iterating over all LogTagSet instances and
> updating them accordingly. The LogTagLevelExpression class is used to
> represent the selection of tags and levels for a given configuration
> request (the "what"-expression).
> The LogDecorators class contains a selection of decorators. Instances
> of this class is kept in LogTagSet to track what decorators to use
> (this is the union of all decorators used by its outputs). Each log
> call will create a LogDecorations instance (note: different classes),
> which will contain the actual decoration strings for the log message.
> These decorations are used for each output the tagset is set to log
> on, and are then discarded.
> The LogPrefix class allows messages of specific sets of tags to be
> prefixed. The prefix should supply a printf-style format with
> argument. (This allows GC logging to prefix messages of certain
> tagsets with GCId.) Prefixes are implemented using template
> specializations based on the specified tags, with the
> general/unspecialized case giving an empty prefix.
> The LogOutput class defines the interface for all types of log
> outputs. LogFileStreamOutput corresponds to FILE* stream based log
> outputs. LogFileOutput builds on this and adds the file management and
> log rotation support.
> A simple jtreg test is included in this patch. Additional tests will
> be added at a later stage.
More information about the hotspot-dev