RFR: 8072645: java.util.logging should use java.time to get more precise time stamps
Stephen Colebourne
scolebourne at joda.org
Sat Feb 14 10:28:10 UTC 2015
Elements of the date/time handling here don't really work.
Logging is essentially a UTC only problem, using a time-zone is slow and
unecessary. This indicates that all uses of ZonedDateTime should be
replaced with either Instant or an OffsetDateTime using ZoneOffset.UTC.
Any string format should have the ISO-8601 string end with "Z", and not end
with "-05:00" or any other zone offset.
(The webrev is broken wrt zones as it stores ZoneId.systemDefault() in a
static constant, but that method depends on the mutable
TimeZone.getDefault() ).
LogReecord.getInstantUTC() should be getInstant().
(An Instant is fully defined as a concept, and it cannot be in or not in
UTC).
In SimpleFormatter, you have {@code java.util.loggin} (missing a "g").
In XMLFormatter, instead of using DateTimeFormatter.ISO_LOCAL_DATE_TIME,
create a new instance of DateTimeFormatter that does not output the
fraction of a second. That way, there is no need to use
truncatedTo(SECONDS).
StringBuilder appends can be used directly with formatters:
sb.append(ZonedDateTime.ofInstant(time, zoneId).format(dtformatter));
replace with
dtformatter.formatTo(ZonedDateTime.ofInstant(time, zoneId), sb);
thanks
Stephen
On 13 Feb 2015 14:57, "Daniel Fuchs" <daniel.fuchs at oracle.com> wrote:
> Hi,
>
> Please find below a patch for:
>
> 8072645: java.util.logging should use java.time to get more
> precise time stamps
>
>
> http://cr.openjdk.java.net/~dfuchs/webrev_8072645/webrev.00/
>
> specdiff:
> http://cr.openjdk.java.net/~dfuchs/webrev_8072645/
> specdiff-logging-time/java/util/logging/package-summary.html
>
> Overview:
> ---------
>
> The patch is made of the following pieces:
>
> - LogRecord uses java.time.Clock's systemClock to get an
> Instant in the best available resolution.
>
> The instant is split into a number of milliseconds (a long)
> and a nanosecond adjustment (an int).
> The number of milliseconds is the same than what would have
> been obtained by calling System.currentTimeMillis().
>
> - LogRecord acquires a new serializable int nanoAdjustement field,
> which can be used together with the number of milliseconds
> to reconstruct the instant.
>
> - SimpleFormatter is updated to pass a ZoneDateTime
> instance to String.format, instead of a Date.
>
> The effect of that is that the format string can now
> be configure to print the full instant precision, if
> needed.
>
> - XMLformatter will add a new <nanos> element after the
> <millis> element - if the value of the nanoAdjustment
> field is not 0.
>
> The <date> string will also contain the nano second
> adjustment as well as the zone offset as formatted by
> DateTimeFormatter.ISO_OFFSET_DATE_TIME
>
> Compatibility considerations:
> -----------------------------
>
> - The serial for of log record is backward/forward compatible.
> I added a test to verify that.
>
> - XMLFormatter has acquired a new configurable property
> '<FQCN>.printNanos' which allows to revert to the old
> XML format, should the new format cause issues in
> existing applications.
>
> - The logger.dtd will need to be updated, to support the
> new optional <nanos> element. And for this matter,
> should we update the logger.dtd or rather define a
> logger-v2.dtd?
> See planned modification:
>
> <http://cr.openjdk.java.net/~dfuchs/webrev_8072645/logger-
> dtd/logger.dtd.frames.html>
>
> best regards,
>
> -- daniel
>
More information about the core-libs-dev
mailing list