Change in properties for logging: deliberate?
Jeremy Manson
jeremymanson at google.com
Fri Nov 10 23:24:43 UTC 2017
Thanks for the attention, Daniel. You may want to consider adjusting it so
that the behavior of .level and .handlers are consistent with each other,
if they aren't... I don't think that should break anyone significantly.
Jeremy
On Fri, Nov 10, 2017 at 1:20 PM, Daniel Fuchs <daniel.fuchs at oracle.com>
wrote:
> Hi Jeremy,
>
> I will propose a fix then.
>
> However be aware that logging configuration files that use ".handlers"
> instead of "handlers" to configure the root logger are fragile, as it
> seems that any subsequent call to LogManager.readConfiguration() will
> remove this configuration. Though I agree this might not be an issue
> if it has stayed unnoticed for 15 years.
>
> I will need to verify the behavior of ".level".
> Thanks for pointing that out. I don't think it has the same flaw but
> I will need to make sure.
>
> best regards,
>
> -- daniel
>
> On 10/11/17 20:48, Jeremy Manson wrote:
>
>> Daniel,
>>
>> Thanks for taking a look at this. I'd like to disagree with the
>> reasoning here.
>>
>> First, it isn't just JDKs 7 and 8 - the behavior is the same all the way
>> back to JDK 1.4, when the java.util.logging API was introduced. So changes
>> affect 15 years' worth of logging configuration files. For example, there
>> are no fewer than 350 instances of this pattern in our codebase. Imagine
>> multiplying that across the entire world - everyone who is doing this has
>> to change their configuration. That's a pretty big cost to introduce on
>> the developer community.
>>
>> This is worse on legacy systems, because the handlers property was broken
>> for a long time, and people basically had to use .handlers:
>> http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6207335.
>>
>> Second, it is inconsistent for ".level" to work for level for the root
>> logger, and ".handlers" not to work for handlers for the root logger. The
>> empty string represents the root logger, and having it only represent the
>> root logger sometimes is (to me) counterintuitive. Without checking, my
>> suspicion is that .level behaves the same way as .handlers (that is, it is
>> only loaded once). If we can live with the inconsistency there, we can
>> live with it here. You can even document that that is the difference.
>>
>> Jeremy
>>
>>
>> On Fri, Nov 10, 2017 at 8:04 AM, Daniel Fuchs <daniel.fuchs at oracle.com
>> <mailto:daniel.fuchs at oracle.com>> wrote:
>>
>> Hi Jason,
>>
>> I have done a few tests with JDK 8 & 7.
>>
>> I have created custom handlers and added some
>> debug traces in their constructors and debug methods.
>>
>> Then I have added these two lines to my logging.properties:
>>
>> handlers = custom.Handler
>> .handlers = custom.DotHandler
>>
>> What I see is this:
>>
>> - the first time the configuration is read, two handlers
>> are added to the root logger:
>> - an instance of DotHandler (first), then an instance
>> of Handler (second).
>>
>> Then if you call LogManager.readConfiguration() again,
>> both handlers are closed, and this time only one
>> instance of Handler is added to the root logger.
>> No instance of DotHandler is added.
>> From now on the property is ignored.
>>
>> This is because the root logger is a special beast:
>> it will not be removed (like all other loggers) when
>> LogManager.readConfiguration() is called.
>>
>> And as it happens, handlers are added to loggers
>> when the loggers are added to the LogManager.
>> As it happens, the ".handlers" property is only parsed
>> and read when the root logger is added to the LogManager,
>> and thus only once.
>>
>> The "handlers" property on the other hand is parsed
>> every time LogManager.readConfiguration() is called.
>>
>> Given that, I suspect we should deprecate the use of
>> ".handlers" for the root logger, as it appears that
>> it has never worked properly. I could work on a patch
>> for 10 (possibly backport it to 9 update) to preserve
>> the strange behavior of 7 & 8, but is it worth it?
>>
>> What are your thoughts?
>>
>> best regards,
>>
>> -- daniel
>>
>>
>>
>>
>>
>> On 09/11/2017 19:50, Jason Mehrens wrote:
>>
>> Daniel,
>>
>> I would assume you would fix since it is advertised as a feature
>> over here:
>> https://docs.oracle.com/javase/1.5.0/docs/guide/logging/
>> changes.html
>> <https://docs.oracle.com/javase/1.5.0/docs/guide/logging/
>> changes.html>
>>
>> If it helps, I've dug up a lot of the history on this over here
>> a while back:
>> https://stackoverflow.com/questions/36726431/in-a-java-util-
>> logging-logging-properties-file-whats-the-difference-between-h
>> <https://stackoverflow.com/questions/36726431/in-a-java-util
>> -logging-logging-properties-file-whats-the-difference-between-h>
>>
>> I've updated that to include the links to this new issue. Now
>> that I've linked this message thread to that message thread that
>> should crash the internet. :)
>>
>> Jason
>>
>> ________________________________________
>> From: core-libs-dev <core-libs-dev-bounces at openjdk.java.net
>> <mailto:core-libs-dev-bounces at openjdk.java.net>> on behalf of
>> Daniel Fuchs <daniel.fuchs at oracle.com
>> <mailto:daniel.fuchs at oracle.com>>
>> Sent: Thursday, November 9, 2017 1:29 PM
>> To: mandy chung
>> Cc: core-libs-dev at openjdk.java.net
>> <mailto:core-libs-dev at openjdk.java.net>
>> Subject: Re: Change in properties for logging: deliberate?
>>
>> On 09/11/2017 19:16, mandy chung wrote:
>>
>> Daniel - we should add this known issue in the release note
>> and document
>> the workaround.
>>
>>
>> Hi Mandy,
>>
>> Right, it either need to be fixed, or documented in the release
>> notes. Let me first have a look at the issue though.
>>
>> best regards,
>>
>> -- daniel
>>
>>
>>
>>
>
More information about the core-libs-dev
mailing list