RFR (L): 8046148: JEP 158 Unified JVM Logging

Rachel Protacio rachel.protacio at oracle.com
Tue Sep 22 18:55:22 UTC 2015


I believe that utilities/ostream.cpp#logStream::write() needs to have a 
line at the end

    update_position(s, len);

As it stands, the code updates the _position variable that belongs to 
the stringStream _current_line (via the _current_line.write() function), 
but the logStream _position does not get updated. This was causing 
problems for me as I tried to make use of the outputStream::indent() 


On 9/7/2015 9:33 AM, Marcus Larsson wrote:
> Hi,
> Please review the following patch adding the unified logging framework 
> to hotspot.
> JEP:
> https://bugs.openjdk.java.net/browse/JDK-8046148
> Webrev:
> http://cr.openjdk.java.net/~mlarsson/8046148/webrev.00/
> 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 
> completely).
> 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.
> Thanks,
> Marcus

More information about the hotspot-dev mailing list