You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gg...@apache.org on 2015/07/08 12:08:10 UTC
[3/3] logging-log4j2 git commit: [LOG4J2-1078] GelfLayout throws
exception if some log event fields are null.
[LOG4J2-1078] GelfLayout throws exception if some log event fields are
null.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/65973561
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/65973561
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/65973561
Branch: refs/heads/master
Commit: 6597356106f2ed2c56683f16fe6d84b160edacc5
Parents: ec2f1d6
Author: ggregory <gg...@apache.org>
Authored: Wed Jul 8 03:08:05 2015 -0700
Committer: ggregory <gg...@apache.org>
Committed: Wed Jul 8 03:08:05 2015 -0700
----------------------------------------------------------------------
.../logging/log4j/core/layout/GelfLayout.java | 23 +++++++++++++-------
src/changes/changes.xml | 3 +++
2 files changed, 18 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65973561/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 19ab128..97414a8 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
@@ -39,14 +39,16 @@ import org.apache.logging.log4j.core.config.plugins.PluginFactory;
import org.apache.logging.log4j.core.net.Severity;
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;
/**
* Lays out events in the Graylog Extended Log Format (GELF) 1.1.
* <p>
- * This layout compresses JSON to GZIP or ZLIB (the {@code compressionType}) if log event data is larger than 1024 bytes
- * (the {@code compressionThreshold}). This layout does not implement chunking.
+ * This layout compresses JSON to GZIP or ZLIB (the {@code compressionType}) if
+ * log event data is larger than 1024 bytes (the {@code compressionThreshold}).
+ * This layout does not implement chunking.
* </p>
* <p>
* Configure as follows to send to a Graylog2 server:
@@ -64,7 +66,8 @@ import com.fasterxml.jackson.core.io.JsonStringEncoder;
* </pre>
*
* @see <a href="http://graylog2.org/gelf">GELF home page</a>
- * @see <a href="http://graylog2.org/resources/gelf/specification">GELF specification</a>
+ * @see <a href="http://graylog2.org/resources/gelf/specification">GELF
+ * specification</a>
*/
@Plugin(name = "GelfLayout", category = Node.CATEGORY, elementType = Layout.ELEMENT_TYPE, printObject = true)
public final class GelfLayout extends AbstractStringLayout {
@@ -191,7 +194,7 @@ public final class GelfLayout extends AbstractStringLayout {
final JsonStringEncoder jsonEncoder = JsonStringEncoder.getInstance();
builder.append('{');
builder.append("\"version\":\"1.1\",");
- builder.append("\"host\":\"").append(jsonEncoder.quoteAsString(host)).append(QC);
+ builder.append("\"host\":\"").append(jsonEncoder.quoteAsString(toNullSafeString(host))).append(QC);
builder.append("\"timestamp\":").append(formatTimestamp(event.getTimeMillis())).append(C);
builder.append("\"level\":").append(formatLevel(event.getLevel())).append(C);
if (event.getThreadName() != null) {
@@ -203,20 +206,24 @@ public final class GelfLayout extends AbstractStringLayout {
for (final KeyValuePair additionalField : additionalFields) {
builder.append(QU).append(jsonEncoder.quoteAsString(additionalField.getKey())).append("\":\"")
- .append(jsonEncoder.quoteAsString(additionalField.getValue())).append(QC);
+ .append(jsonEncoder.quoteAsString(toNullSafeString(additionalField.getValue()))).append(QC);
}
for (final Map.Entry<String, String> entry : event.getContextMap().entrySet()) {
builder.append(QU).append(jsonEncoder.quoteAsString(entry.getKey())).append("\":\"")
- .append(jsonEncoder.quoteAsString(entry.getValue())).append(QC);
+ .append(jsonEncoder.quoteAsString(toNullSafeString(entry.getValue()))).append(QC);
}
if (event.getThrown() != null) {
builder.append("\"full_message\":\"").append(jsonEncoder.quoteAsString(formatThrowable(event.getThrown())))
.append(QC);
}
- builder.append("\"short_message\":\"")
- .append(jsonEncoder.quoteAsString(event.getMessage().getFormattedMessage())).append(Q);
+ builder.append("\"short_message\":\"").append(jsonEncoder.quoteAsString(toNullSafeString(event.getMessage().getFormattedMessage())))
+ .append(Q);
builder.append('}');
return builder.toString();
}
+
+ private String toNullSafeString(String s) {
+ return s == null ? Strings.EMPTY : s;
+ }
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65973561/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 33cf725..f4a0077 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -123,6 +123,9 @@
<action issue="LOG4J2-918" dev="rpopma" type="fix">
Clarify documentation for combining async with sync loggers.
</action>
+ <action issue="LOG4J2-1078" dev="ggregory" type="fix" due-to="Mikael Ståldal">
+ GelfLayout throws exception if some log event fields are null.
+ </action>
<action issue="LOG4J2-1044" dev="rgoers" type="update">
Support batchSize in FlumeAvroManager.
</action>