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

Ioi Lam ioi.lam at oracle.com
Tue Sep 8 20:53:27 UTC 2015


Also, is it possible to combine the output of two tags into a single 
file, like this?

      -Xlog:gc:file=out.txt -Xlog:comp:file=out.txt

this way, I can have both GC and Compiler logs that's in an 
(approximate) temporal order. The alternatives are:

- write both to stdout -- but I need to filter out junk that I don't want
- write to different files -- but I lose the relative ordering between 
the two sets of logs

 From the current patch, it seems like if I assign the same file name to 
two tags, fopen() will be called twice and the result will be platform 
dependent.

- Ioi

On 9/8/15 1:26 PM, Ioi Lam wrote:
> Hi Marcus,
>
> I am eagerly waiting for this to implement a new logging feature in 
> the VM. How much testing has been done on this patch? I can see only 
> two locations where any logs are bring generated:
>
> +    log_error(logging)("%s", errbuf);
> +    log_error(logging)("Could not open log file '%s' (%s).\n", 
> _file_name, strerror(errno));
>
> Do you have a follow-on patch that's already in work to test the 
> various functionalists of the Unified JVM Logging framework? I am 
> asking so that I can know how much surprise to expect when I start 
> using it.
>
> Thanks
> - Ioi
>
>
> On 9/7/15 6: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