Some results using Java 17:

*yyyy-MM-dd'T'HH:mm:ss.SSS*DateTimeFormatter  2.844 ± 0.310  ops/ms
FastDateFormat     6.847 ± 1.302  ops/ms
FixedDateFormat   39.497 ± 6.423  ops/ms

*HH:mm:ss.SSS*
DateTimeFormatter  3.881 ± 0.447  ops/ms
FastDateFormat    10.862 ± 1.915  ops/ms
FixedDateFormat   39.618 ± 9.318  ops/ms


I used distinct instants within the same day to avoid cache misses in
`FixedDateFormat`'s cache on the `yyyy-MM-dd` part, which is updated daily
at midnight. That is why `FixedDF` figures are more or less the same for
both patterns.

On Mon, Oct 14, 2024 at 9:48 PM Ralph Goers <ralph.go...@dslextreme.com>
wrote:

> Before I can weigh in one way or another I would need to know what the
> performance difference is between DateTimeFormatter and the Fixed and Fast
> classes, at least where they are working properly. Any such test should
> include the caching otherwise you would be comparing worst case performance.
>
> Ralph
>
> > On Oct 14, 2024, at 12:30 PM, Volkan Yazıcı <vol...@yazi.ci.INVALID>
> wrote:
> >
> > *Abstract:* Log4j contains two custom date & time formatting classes. All
> > our competitors (Logback
> > <
> https://github.com/qos-ch/logback/blob/master/logback-core/src/main/java/ch/qos/logback/core/util/CachingDateFormatter.java
> >,
> > Tinylog
> > <
> https://github.com/tinylog-org/tinylog/blob/7590ad150b1523691ae6f26ae24a291b81d804c9/tinylog-api/src/main/java/org/tinylog/runtime/PreciseTimestampFormatter.java
> >,
> > etc.) use Java's `DateTimeFormatter` and I know of no user complaints
> about
> > their performance issues. Shall we switch to `DateTimeFormatter` as the
> > default in the next minor release and make the custom implementations
> > opt-in?
> >
> > Log4j ships two custom date & time formatting classes:
> >
> >   - `FixedDateFormat`
> >      - Supports a hardcoded list of formats
> >      - Bug: Conflates `n` directive with `S`
> >      - Bug: It cannot calculate DST correctly for all time zones
> >      <https://github.com/apache/logging-log4j2/issues/2943>
> >   - `FastDateFormat`
> >      - Copied from Commons Lang in 2015
> >
> > I recently ran a test comparing the output of these with
> > `DateTimeFormatter` – the difference is *big*! I can spend months fixing
> > these issues, but... Do we really need them?
> >
> >   1. No other competitors have such an optimization (both Logback
> >   <
> https://github.com/qos-ch/logback/blob/master/logback-core/src/main/java/ch/qos/logback/core/util/CachingDateFormatter.java
> >
> >    and Tinylog
> >   <
> https://github.com/tinylog-org/tinylog/blob/7590ad150b1523691ae6f26ae24a291b81d804c9/tinylog-api/src/main/java/org/tinylog/runtime/PreciseTimestampFormatter.java
> >
> > use
> >   `DateTimeFormatter`)
> >   2. Date & time formatting is very fragile (DST is more voodoo than
> >   science)
> >   3. If date & time formatting during logging is found to be the
> >   bottleneck of an application, shouldn't they instead encode it
> differently,
> >   e.g., encoding epoch numbers?
> >   4. `DateTimeFormatter` performance will only get better over time
> >
> > Hence, I propose switching all layouts to use `DateTimeFormatter`, unless
> > the `log4j.time.legacyFormatterEnabled` property is provided. Objections?
> >
> > Note that the caching optimization we have for the last formatted
> timestamp
> > will stay untouched.
>
>

Reply via email to