RFR (L): 8046148: JEP 158 Unified JVM Logging
Coleen Phillimore
coleen.phillimore at oracle.com
Wed Sep 23 18:14:04 UTC 2015
Looks good!
Coleen
On 9/23/15 7:10 AM, Marcus Larsson wrote:
> Hi again,
>
> Here is the third and hopefully final version of the patch.
>
> Incremental webrev:
> http://cr.openjdk.java.net/~mlarsson/8046148/webrev.01-02/
>
> Full webrev:
> http://cr.openjdk.java.net/~mlarsson/8046148/webrev.02/
>
> Changes:
> * Use update_position() in logStream::write so that indent() works
> properly
> * Add units (ms, ns) to all time decorations
> * Additional comments
>
> Thanks,
> Marcus
>
> On 2015-09-15 11:36, Marcus Larsson wrote:
>> Hi,
>>
>> Here is the updated version of the patch, including the feedback and
>> suggestions from Coleen, David and Ioi.
>>
>> Incremental webrev:
>> http://cr.openjdk.java.net/~mlarsson/8046148/webrev.00-01/
>>
>> Full webrev:
>> http://cr.openjdk.java.net/~mlarsson/8046148/webrev.01/
>>
>> Changes include:
>> * 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 length
>> * Fixed broken printf-attribute on Log::write functions
>> * Moved VM startup timestamp to after os::init
>> * Formatting and code style changes
>>
>> Thanks,
>> Marcus
>>
>>
>> On 2015-09-07 15:33, 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