Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
2.11.0
-
None
-
None
Description
Log4j2 incorrectly formats instance objects of java.sql.Time. Consider following case -
final Time time = Time.valueOf("12:00:00");
logger.info("Time : {}", time);
Now, the expected output is Time : 12:00:00 but instead it is logged as Time : 1970-01-01T12:00:00.000+0530. Since java.sql.Time has no date component, it is wrong to format it this way.
The problem here is pretty obvious. ParameterFormatter's appendSpecialTypes method calls StringBuilders.appendSpecificTypes method, which does not handle dates or times (I wonder why) and then calls appendDate. Since java.sql.Time extends java.util.Date the formatter there is used. This code does not handle any of the classes from Java 8's java.time package.
In my opinion appendSpecificTypes should be modified to handle all the various dates and times, including java.time. The Log4j 2 3.x version should use java.time's formatter to format them.