You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by mi...@apache.org on 2016/03/23 17:18:06 UTC

logging-log4j2 git commit: Allocation free formatTimestamp

Repository: logging-log4j2
Updated Branches:
  refs/heads/master 0b77d16dc -> f41322b49


Allocation free formatTimestamp


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/f41322b4
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/f41322b4
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/f41322b4

Branch: refs/heads/master
Commit: f41322b493cf5e705c25ed720f53bf937f47fcbc
Parents: 0b77d16
Author: Mikael Ståldal <mi...@magine.com>
Authored: Wed Mar 23 17:17:58 2016 +0100
Committer: Mikael Ståldal <mi...@magine.com>
Committed: Wed Mar 23 17:17:58 2016 +0100

----------------------------------------------------------------------
 .../logging/log4j/core/layout/GelfLayout.java   | 42 +++++++++++++-------
 .../log4j/core/layout/GelfLayoutTest.java       |  4 ++
 2 files changed, 32 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f41322b4/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
index 6d247c2..da28935 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
@@ -16,18 +16,7 @@
  */
 package org.apache.logging.log4j.core.layout;
 
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.math.BigDecimal;
-import java.nio.charset.StandardCharsets;
-import java.util.Collections;
-import java.util.Map;
-import java.util.zip.DeflaterOutputStream;
-import java.util.zip.GZIPOutputStream;
-
+import com.fasterxml.jackson.core.io.JsonStringEncoder;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.Layout;
 import org.apache.logging.log4j.core.LogEvent;
@@ -42,7 +31,13 @@ import org.apache.logging.log4j.core.util.KeyValuePair;
 import org.apache.logging.log4j.status.StatusLogger;
 import org.apache.logging.log4j.util.Strings;
 
-import com.fasterxml.jackson.core.io.JsonStringEncoder;
+import java.io.*;
+import java.math.BigDecimal;
+import java.nio.charset.StandardCharsets;
+import java.util.Collections;
+import java.util.Map;
+import java.util.zip.DeflaterOutputStream;
+import java.util.zip.GZIPOutputStream;
 
 /**
  * Lays out events in the Graylog Extended Log Format (GELF) 1.1.
@@ -222,7 +217,26 @@ public final class GelfLayout extends AbstractStringLayout {
      * Non-private to make it accessible from unit test.
      */
     static CharSequence formatTimestamp(final long timeMillis) {
-        return new BigDecimal(timeMillis).divide(TIME_DIVISOR).toPlainString();
+        if (timeMillis < 1000) {
+            return "0";
+        } else {
+            StringBuilder builder = getTimestampStringBuilder();
+            builder.append(timeMillis);
+            builder.insert(builder.length() - 3, '.');
+            return builder;
+        }
+    }
+
+    private static final ThreadLocal<StringBuilder> timestampStringBuilder = new ThreadLocal<>();
+
+    private static StringBuilder getTimestampStringBuilder() {
+        StringBuilder result = timestampStringBuilder.get();
+        if (result == null) {
+            result = new StringBuilder(20);
+            timestampStringBuilder.set(result);
+        }
+        result.setLength(0);
+        return result;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f41322b4/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutTest.java
index c89fad9..d3e66d6 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutTest.java
@@ -214,6 +214,10 @@ public class GelfLayoutTest {
     @Test
     public void testFormatTimestamp() {
         assertEquals("0", GelfLayout.formatTimestamp(0L).toString());
+        assertEquals("1.000", GelfLayout.formatTimestamp(1000L).toString());
+        assertEquals("1.001", GelfLayout.formatTimestamp(1001L).toString());
+        assertEquals("1.010", GelfLayout.formatTimestamp(1010L).toString());
+        assertEquals("1.100", GelfLayout.formatTimestamp(1100L).toString());
         assertEquals("1458741206.653", GelfLayout.formatTimestamp(1458741206653L).toString());
         assertEquals("9223372036854775.807", GelfLayout.formatTimestamp(Long.MAX_VALUE).toString());
     }