Hi Staffan,

I've noticed that the specification has been updated but still contains the 
hierarchical level system.  Is it your intention to maintain level in the 
specification?

Regards,
Kirk

On 2012-06-20, at 12:50 PM, Staffan Larsen wrote:

> Hi,
> 
> Thanks for the feedback! 
> 
> It is going to be hard to find the right balance between a system that 
> provides great power and one that is simple to use and to implement. In 
> general, I will lean more towards making it simple, but I want to make sure 
> we cover the major use cases as well.
> 
> It looks like there are three possible ways to select log messages being 
> discussed here. I'd like to discuss how to solve your problem for each one.
> 
> 1) Selection based on component/level. (This is what is described in the JEP.)
> In this case we can have any number of components. So we can have gc and 
> tenuring as different component. They will each have a level associated with 
> them. However there is no relationship between the gc and the tenuring 
> component, so to enable both you need to say -Xverbose:gc,tenuring. To only 
> enable tenuring you can say -Xverbose:tenuring. To enable all gc messages, 
> except tenuring you say -Xverbose:gc.
> 
> 2) Selection based on component/level where the component is a hierarchy.
> In this case the different steps in the hierarchy can have different levels 
> associated with them, but if there is no explicit level associated, the 
> parent level will be used. So to enable both tenuring and gc you would say 
> -Xverbose:gc. To enable only gc you would say -Xverbose:gc,gc.tenuring=none 
> (I made up the 'none' level). To enable only tenuring you would say 
> -Xverbose:gc.tenuring.
> 
> 3) Selection based on tags. 
> In this case log messages are associated with a set of tags instead of a 
> component/level tuple. You select messages by specifying tags you want to 
> see. I imagine that in this case the tenuring messages would be tagged with 
> both the gc and the tenuring tags, but that there would be other messages 
> tagged with gc only. To enable gc and tenuring you would say 
> -Xverbose:gc,tenuring. To enable all gc messages you say -Xverbose:gc. There 
> is no way to see only gc messages without seeing the tenuring messages.
> 
> Is this a fair description of the different ways? I'm especially interested 
> in the last one - I'm not sure I captured your idea correctly there.
> 
> Thanks,
> /Staffan
> 
> 
> On 20 jun 2012, at 09:32, Jesper Wilhelmsson wrote:
> 
>> Hi Kirk,
>> 
>> I'm CC'ing serviceability on this since this is really their JEP and 
>> discussions around it should go on the serviceability list, even though it 
>> seems you are mainly interested in GC logging at this point.
>> 
>> I understand what you want and I see that the logging level won't help us 
>> get there. I don't agree that the logging we have today can't fit nicely 
>> into a hierarchical scheme though, it just needs to be more fine grained to 
>> achieve what you want.
>> 
>> We can be pretty generous with modules and in principal have one module for 
>> each verbose flag that exists today. Personally I don't think that is a good 
>> idea, but it certainly is possible. I would rather like to propose a 
>> different solution.
>> 
>> How about we have a gc module that can be filtered based on different sub 
>> modules. The sub modules could be fairly close to the existing verbose flags 
>> that exists today if that turns out to be a good way to divide information. 
>> It could look like this
>> 
>> -Xverbose:gc=info,gc.tenuring=debug
>> 
>> to set regular gc verbose to info level (I would say that is close to 
>> PrintGC) and turn on more detailed logging for tenuring. Or
>> 
>> -Xverbose:gc.tenuring
>> 
>> that could be equal to what that flag prints today. Let's see what the 
>> serviceability team thinks since they are the ones who will actually 
>> implement this in the end.
>> 
>> Another solution that I don't really like but guess is easier to implement 
>> is to add the current verbose flag to the actual message so that the logs 
>> can be filtered based on that. But this will clutter the messages and we 
>> would still have the problem to decide on which level things should get 
>> logged.
>> /Jesper
>> 
>> 
>> On 2012-06-20 07:28, Kirk Pepperdine wrote:
>>> 
>>> Hi Jesper,
>>> 
>>> I did read the spec and I do like the ability to specify the "component" 
>>> that you'd like to log information from. So I feel that is a great 
>>> improvement over the (broken) pattern established in every major logging 
>>> Java framework. I'm going to stick to GC logging just because I've spent so 
>>> much time puzzling over them and adjusting my parser to deal with all the 
>>> changes that have continuously crept into them. While 'm certainly not 
>>> going to argue for keeping the current GC logging framework what I will say 
>>> is that it's not all bad in that the flags that have been provided to me 
>>> are almost always semantically meaningful in that they tell me what I'm 
>>> going to see. In this spirit I'd like to see a category like 
>>> TenuringDetails for example. Is this information INFO, DEBUG, or TRACE? 
>>> hard to say but it's clearly TenuringDetails and so this is a subcategory 
>>> that I'd like to define and it's clearly not a subcategory that you'd want 
>>> to define a generalize logging framework. And it is here that this 
>>> specification over-reaches. It tries to define logging categories that are 
>>> not only are devoid of meaning, they assume a hierarchical structure to 
>>> them. Going back to GC logging I would argue that while there is some 
>>> hierarchy in there, most of the messages don't nicely fit into this imposed 
>>> hierarchical developer centric list of categories.
>>> 
>>> I think we could easily both agree that it would be ridiculous for me to 
>>> ask that you add PrintTunuring to the list of levels yet that is exactly 
>>> what I want. So I guess what I'm asking is, what would the spec look like 
>>> if you removed the log levels from it and allowed me to define my own or to 
>>> not even use levels at all.
>>> 
>>> Regards,
>>> Kirk
>>> 
>>> On 2012-06-20, at 1:03 AM, Jesper Wilhelmsson wrote:
>>> 
>>>> Hi Kirk,
>>>> 
>>>> To select what should be logged there should be logging modules. A module 
>>>> could be for example class loading, gc, jit compiler etc. The logging 
>>>> level is just a way to control how much logging you want. Setting gc=info 
>>>> would give you some basic gc logging while gc=debug would give you more 
>>>> detailed info.
>>>> 
>>>> A typical command line could look like
>>>> 
>>>> -Xverbose:gc=debug,finalizer=info,compiler,alloc,cookies=trace
>>>> /Jesper
>>>> 
>>>> 
>>>> On 2012-06-19 23:44, Kirk Pepperdine wrote:
>>>>> 
>>>>> Hi,
>>>>> 
>>>>> I see the logging framework JEP finally was published. This is great news.
>>>>> 
>>>>> I'd like to comment on this quality
>>>>> 
>>>>> "Logging is performed at different levels: error, warning, info, debug, 
>>>>> trace"
>>>>> 
>>>>> If we accept the problems associated with level based logging, these name 
>>>>> work for generic frameworks such as Log4J and JDK logging. However, the 
>>>>> names are meaningless in that they carry no semantic context with what 
>>>>> would be logged. The nice thing about the current set of flags is they 
>>>>> convey the information that will be printed.
>>>>> 
>>>>> On the question of log levels. I was hoping that we would have learned 
>>>>> from the follies of using level based logging instead of a digital or tag 
>>>>> based system. IOWs a on or off different aspects without having to eat 
>>>>> the whole elephant of records that some developer arbitrarily decided 
>>>>> should be dumped at a particular log level. One can level tags.. but you 
>>>>> can't get tags or digital behaviour from levels.
>>>>> 
>>>>> Kind regards,
>>>>> Kirk Pepperdine
>>>> <jesper_wilhelmsson.vcf>
>>> 
>> <jesper_wilhelmsson.vcf>
> 

Reply via email to