RFR: 8142366: Add develop_debug and develop_trace levels to Unified Logging

Rachel Protacio rachel.protacio at oracle.com
Wed Nov 11 20:05:09 UTC 2015


Hi,

Thanks for the feedback. I appreciate the justification behind wanting a 
single develop level, but our desire for multiple levels I think comes 
again from letting the user have fine control over the amount of output. 
In particular, I am working on TraceItables and PrintVtables, which 
contain code that (before the change) has regular and verbose output. 
This would translate to "debug" and "trace" levels in the product mode, 
but I don't think anyone will argue that the hundreds of lines that 
print out about itables and vtables need to be in the product. So if we 
move all the code to a single develop level, the user loses the ability 
to distinguish between some extra information and tons of extra 
information. I think it would be wrong to rob them of this amount of 
control, when the existing non-product implementation allows them to 
have it. I don't think, though, that the non-product levels should be in 
a separate system; I think it is right for them to aggregate below the 
product levels. As you and Marcus pointed out, it would be confusing to 
have non-product and product logging appear together as if it were the 
same level. The develop logging is more detailed, so it should still be 
below. I just think we need to have multiple levels below - ones that do 
not need to take up space in the product release but should still allow 
users to control their verbosity.

Does that make sense?

Thanks,
Rachel

On 11/11/2015 2:25 PM, Bengt Rutisson wrote:
>
> Hi all,
>
> I agree with Marcus here. Adding more levels below the Trace level 
> seems odd.
>
> I interpret Marcus' suggestion 2) as that there would be for example a 
> log_develop_trace() macro that does nothing in product builds and that 
> calls log_trace() in debug builds. Similarly for info and debug.
>
> To me that seems like a reasonable approach. But I do see the problem 
> that Marcus mentions. That it will be hard to distinguish develop 
> logging from normal logging in the output.
>
> So far it's been enough for me with the single Develop level. Can you 
> give an example of a use case where the different develop levels are 
> needed?
>
> Thanks,
> Bengt
>
> On 2015-11-11 15:01, Marcus Larsson wrote:
>> Hi,
>>
>> I don't think this is the right approach for this problem.
>>
>> These new develop levels are introduced as even finer levels than the 
>> trace, but have names that somewhat say otherwise.
>> For example, develop_info is finer than trace, but it isn't 
>> unreasonable to expect that develop_info actually shares verbosity 
>> with the regular info level.
>>
>>
>> I see two ways to look at this:
>>
>> 1) develop is a level, which is so verbose/expensive that it is not 
>> possible to include it in the product (current implementation).
>> The following levels are used: error, warning, info, debug, trace and 
>> develop. There is no concept of levels for the develop only logging 
>> (it IS the level).
>> Selecting/distinguishing different logging on develop level is done 
>> by using tags.
>>
>> 2) There is no concept of a develop level, either the logging is 
>> included in product or it isn't (compare to using #ifdefs around the 
>> logging calls).
>> Development-only logging is orthogonal to the regular log levels, 
>> i.e. some log_info calls should only be made in non-product builds 
>> (log_develop_info),
>> but should still follow the regular log level system (as all other 
>> logging does) and use the info level.
>> The following levels are used: error, warning, info, debug, trace, 
>> and convenience macros are used to strip develop-logging from 
>> non-product builds.
>>
>> The downside of this approach is that it becomes harder to 
>> distinguish what is logged only in non-product builds and what is 
>> always logged.
>> Depending on if the build is non-product or not one can get different 
>> output for "-Xlog".
>>
>>
>> The current proposal mixes these two approaches and adds develop 
>> "levels" that are all finer than trace, which is confusing.
>>
>> In my opinion, there should be no reason to require multiple levels 
>> for non-product logging. I would assume all develop level logging to 
>> be very specific, i.e. have a very specific tagset,
>> and require no support for selection/separation using log levels. If 
>> it does, then I would argue for that the logging is missing some 
>> classifying log tag that could be used instead of a level.
>> The logging has already been classified as verbose/expensive, why 
>> classify it further on a level scale?
>>
>> Thanks,
>> Marcus
>>
>>
>> On 2015-11-11 00:13, Coleen Phillimore wrote:
>>>
>>> I think this looks good.   I added serviceability-dev to the mailing 
>>> list.
>>>
>>> Coleen
>>>
>>> On 11/10/15 2:18 PM, Rachel Protacio wrote:
>>>> Good point. I have changed Develop to DevelopInfo. I think it's 
>>>> better to maintain the same levels of levels on the develop side so 
>>>> that the logging can just shift laterally to non-product, as it were.
>>>>
>>>> And yes, they are specified as -Xlog:<tag>=develop_debug
>>>>
>>>> Updated webrev: http://cr.openjdk.java.net/~rprotacio/8142366.01/
>>>> I re-tested with logging jtreg tests and ExecuteInternalVMTests 
>>>> test, and for anyone who was curious (namely Max who had the good 
>>>> idea for me to check), the debug levels do correctly "nest" with 
>>>> more verbose ones printing out the less verbose and product mode 
>>>> logging as well.
>>>>
>>>> Thanks,
>>>> Rachel
>>>>
>>>> On 11/9/2015 6:05 PM, Coleen Phillimore wrote:
>>>>>
>>>>> Hi Rachel,
>>>>>
>>>>> I sort of thought DevelopDebug would replace plain Develop, and 
>>>>> DevelopTrace would be additional lower level.   Maybe plain 
>>>>> Develop should be DevelopInfo then?
>>>>>
>>>>> Another question - how do you specify these levels?  Is it 
>>>>> -Xlog:itables=develop_debug ?
>>>>>
>>>>> Thanks,
>>>>> Coleen
>>>>>
>>>>> On 11/9/15 5:55 PM, Rachel Protacio wrote:
>>>>>> Hello,
>>>>>>
>>>>>> Please see my small changeset to add two develop levels to UL.
>>>>>>
>>>>>> Summary: This adds develop (that is, non-product) logging levels 
>>>>>> to the Unified Logging framework in order to support performance, 
>>>>>> footprint, and usefulness-of-output considerations while 
>>>>>> maintaining the ability for the user to specify levels of 
>>>>>> verbosity, i.e. default, "debug," and "trace" levels.
>>>>>> Open webrev: http://cr.openjdk.java.net/~rprotacio/8142366/
>>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8142366
>>>>>>
>>>>>> I tested the added levels locally with sample log messages to 
>>>>>> ensure proper functioning. When I convert future tags to logging 
>>>>>> with these levels, those tags will have their own tests and 
>>>>>> inherently exercise the added levels.
>>>>>>
>>>>>> Thank you,
>>>>>> Rachel
>>>>>
>>>>
>>>
>>
>



More information about the hotspot-runtime-dev mailing list