Use Java 8 Date/Time API
So far, explicit synchronization was done when formatting the log
time stamp.
Using the new Date/Time API avoids synchronization and simplifies the
code.
Change-Id: I2de0ec37238d6bc78ce17e6b7304343c870c6c75
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteLogLayout.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteLogLayout.java
index cc4c436..7797c6d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteLogLayout.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteLogLayout.java
@@ -14,28 +14,17 @@
package com.googlesource.gerrit.plugins.deleteproject;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.TimeZone;
+import java.time.Instant;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
import org.apache.log4j.Layout;
import org.apache.log4j.spi.LoggingEvent;
import org.eclipse.jgit.util.QuotedString;
final class DeleteLogLayout extends Layout {
- private final Calendar calendar;
- private long lastTimeMillis;
- private final char[] lastTimeString = new char[20];
- private final char[] timeZone;
-
- public DeleteLogLayout() {
- TimeZone tz = TimeZone.getDefault();
- calendar = Calendar.getInstance(tz);
-
- SimpleDateFormat sdf = new SimpleDateFormat("Z");
- sdf.setTimeZone(tz);
- timeZone = sdf.format(new Date()).toCharArray();
- }
+ private static final DateTimeFormatter DATE_FORMATTER =
+ DateTimeFormatter.ofPattern("'['yyyy-MM-dd HH:mm:ss,SSS xxxx']'");
/**
* Formats the events in the delete log.
@@ -51,11 +40,7 @@
public String format(LoggingEvent event) {
final StringBuffer buf = new StringBuffer(128);
- buf.append('[');
- formatDate(event.getTimeStamp(), buf);
- buf.append(' ');
- buf.append(timeZone);
- buf.append(']');
+ buf.append(formatDate(event.getTimeStamp()));
buf.append(' ');
buf.append(event.getLevel().toString());
@@ -74,36 +59,9 @@
return buf.toString();
}
- private void formatDate(final long now, final StringBuffer sbuf) {
- final int millis = (int) (now % 1000);
- final long rounded = now - millis;
- if (rounded != lastTimeMillis) {
- synchronized (calendar) {
- final int start = sbuf.length();
- calendar.setTimeInMillis(rounded);
- sbuf.append(calendar.get(Calendar.YEAR));
- sbuf.append('-');
- sbuf.append(toTwoDigits(calendar.get(Calendar.MONTH) + 1));
- sbuf.append('-');
- sbuf.append(toTwoDigits(calendar.get(Calendar.DAY_OF_MONTH)));
- sbuf.append(' ');
- sbuf.append(toTwoDigits(calendar.get(Calendar.HOUR_OF_DAY)));
- sbuf.append(':');
- sbuf.append(toTwoDigits(calendar.get(Calendar.MINUTE)));
- sbuf.append(':');
- sbuf.append(toTwoDigits(calendar.get(Calendar.SECOND)));
- sbuf.append(',');
- sbuf.getChars(start, sbuf.length(), lastTimeString, 0);
- lastTimeMillis = rounded;
- }
- } else {
- sbuf.append(lastTimeString);
- }
- sbuf.append(String.format("%03d", millis));
- }
-
- private String toTwoDigits(int input) {
- return String.format("%02d", input);
+ private String formatDate(long now) {
+ ZonedDateTime zdt = ZonedDateTime.ofInstant(Instant.ofEpochMilli(now), ZoneId.systemDefault());
+ return zdt.format(DATE_FORMATTER);
}
private void req(String key, StringBuffer buf, LoggingEvent event) {