You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rp...@apache.org on 2016/03/24 17:16:36 UTC
[09/11] logging-log4j2 git commit: Allocation free formatTimestamp
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/LOG4J2-1278-gc-free-logger
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());
}