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 2017/08/17 18:59:07 UTC
logging-log4j2 git commit: LOG4J2-2020 Remove default layout from
KafkaAppender
Repository: logging-log4j2
Updated Branches:
refs/heads/master d2aa15bd1 -> c14eb2729
LOG4J2-2020 Remove default layout from KafkaAppender
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/c14eb272
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/c14eb272
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/c14eb272
Branch: refs/heads/master
Commit: c14eb272985cd718c210ca13e251fa49881eebc5
Parents: d2aa15b
Author: Mikael Ståldal <mi...@staldal.nu>
Authored: Thu Aug 17 20:59:01 2017 +0200
Committer: Mikael Ståldal <mi...@staldal.nu>
Committed: Thu Aug 17 20:59:01 2017 +0200
----------------------------------------------------------------------
.../core/appender/mom/kafka/KafkaAppender.java | 49 ++++++-----
.../appender/mom/kafka/KafkaAppenderTest.java | 15 +---
.../src/test/resources/KafkaAppenderTest.xml | 88 ++++++++++----------
src/changes/changes.xml | 3 +
src/site/xdoc/manual/appenders.xml | 5 +-
5 files changed, 74 insertions(+), 86 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c14eb272/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppender.java
index 5fb1c7c..81ec09b 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppender.java
@@ -18,12 +18,12 @@
package org.apache.logging.log4j.core.appender.mom.kafka;
import java.io.Serializable;
-import java.nio.charset.StandardCharsets;
import java.util.Objects;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
+import org.apache.logging.log4j.core.AbstractLifeCycle;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.Filter;
import org.apache.logging.log4j.core.Layout;
@@ -35,11 +35,8 @@ import org.apache.logging.log4j.core.config.Property;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
-import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
import org.apache.logging.log4j.core.config.plugins.PluginElement;
-import org.apache.logging.log4j.core.config.plugins.validation.constraints.Required;
import org.apache.logging.log4j.core.layout.SerializedLayout;
-import org.apache.logging.log4j.core.util.StringEncoder;
/**
* Sends log events to an Apache Kafka topic.
@@ -66,8 +63,13 @@ public final class KafkaAppender extends AbstractAppender {
@SuppressWarnings("resource")
@Override
public KafkaAppender build() {
+ final Layout<? extends Serializable> layout = getLayout();
+ if (layout == null) {
+ AbstractLifeCycle.LOGGER.error("No layout provided for KafkaAppender");
+ return null;
+ }
final KafkaManager kafkaManager = new KafkaManager(getConfiguration().getLoggerContext(), getName(), topic, syncSend, properties);
- return new KafkaAppender(getName(), getLayout(), getFilter(), isIgnoreExceptions(), kafkaManager);
+ return new KafkaAppender(getName(), layout, getFilter(), isIgnoreExceptions(), kafkaManager);
}
public String getTopic() {
@@ -100,13 +102,18 @@ public final class KafkaAppender extends AbstractAppender {
@Deprecated
public static KafkaAppender createAppender(
- @PluginElement("Layout") final Layout<? extends Serializable> layout,
- @PluginElement("Filter") final Filter filter,
- @Required(message = "No name provided for KafkaAppender") @PluginAttribute("name") final String name,
- @PluginAttribute(value = "ignoreExceptions", defaultBoolean = true) final boolean ignoreExceptions,
- @Required(message = "No topic provided for KafkaAppender") @PluginAttribute("topic") final String topic,
- @PluginElement("Properties") final Property[] properties,
- @PluginConfiguration final Configuration configuration) {
+ final Layout<? extends Serializable> layout,
+ final Filter filter,
+ final String name,
+ final boolean ignoreExceptions,
+ final String topic,
+ final Property[] properties,
+ final Configuration configuration) {
+
+ if (layout == null) {
+ AbstractLifeCycle.LOGGER.error("No layout provided for KafkaAppender");
+ return null;
+ }
final KafkaManager kafkaManager = new KafkaManager(configuration.getLoggerContext(), name, topic, true, properties);
return new KafkaAppender(name, layout, filter, ignoreExceptions, kafkaManager);
}
@@ -144,18 +151,14 @@ public final class KafkaAppender extends AbstractAppender {
private void tryAppend(final LogEvent event) throws ExecutionException, InterruptedException, TimeoutException {
final Layout<? extends Serializable> layout = getLayout();
byte[] data;
- if (layout != null) {
- if (layout instanceof SerializedLayout) {
- final byte[] header = layout.getHeader();
- final byte[] body = layout.toByteArray(event);
- data = new byte[header.length + body.length];
- System.arraycopy(header, 0, data, 0, header.length);
- System.arraycopy(body, 0, data, header.length, body.length);
- } else {
- data = layout.toByteArray(event);
- }
+ if (layout instanceof SerializedLayout) {
+ final byte[] header = layout.getHeader();
+ final byte[] body = layout.toByteArray(event);
+ data = new byte[header.length + body.length];
+ System.arraycopy(header, 0, data, 0, header.length);
+ System.arraycopy(body, 0, data, header.length, body.length);
} else {
- data = StringEncoder.toBytes(event.getMessage().getFormattedMessage(), StandardCharsets.UTF_8);
+ data = layout.toByteArray(event);
}
manager.send(data);
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c14eb272/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppenderTest.java
index 4cac0db..2f60750 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppenderTest.java
@@ -96,19 +96,6 @@ public class KafkaAppenderTest {
}
@Test
- public void testAppend() throws Exception {
- final Appender appender = ctx.getRequiredAppender("KafkaAppender");
- appender.append(createLogEvent());
- final List<ProducerRecord<byte[], byte[]>> history = kafka.history();
- assertEquals(1, history.size());
- final ProducerRecord<byte[], byte[]> item = history.get(0);
- assertNotNull(item);
- assertEquals(TOPIC_NAME, item.topic());
- assertNull(item.key());
- assertEquals(LOG_MESSAGE, new String(item.value(), StandardCharsets.UTF_8));
- }
-
- @Test
public void testAppendWithLayout() throws Exception {
final Appender appender = ctx.getRequiredAppender("KafkaAppenderWithLayout");
appender.append(createLogEvent());
@@ -157,7 +144,7 @@ public class KafkaAppenderTest {
@Test(timeout = 2000)
public void testClose() throws Exception {
- final Appender appender = ctx.getRequiredAppender("KafkaAppender");
+ final Appender appender = ctx.getRequiredAppender("KafkaAppenderWithLayout");
appender.stop();
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c14eb272/log4j-core/src/test/resources/KafkaAppenderTest.xml
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/resources/KafkaAppenderTest.xml b/log4j-core/src/test/resources/KafkaAppenderTest.xml
index dda8271..2af8586 100644
--- a/log4j-core/src/test/resources/KafkaAppenderTest.xml
+++ b/log4j-core/src/test/resources/KafkaAppenderTest.xml
@@ -1,47 +1,43 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one or more
- ~ contributor license agreements. See the NOTICE file distributed with
- ~ this work for additional information regarding copyright ownership.
- ~ The ASF licenses this file to You under the Apache license, Version 2.0
- ~ (the "License"); you may not use this file except in compliance with
- ~ the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the license for the specific language governing permissions and
- ~ limitations under the license.
- -->
-<Configuration name="KafkaAppenderTest" status="OFF">
- <Appenders>
- <Kafka name="KafkaAppender" topic="kafka-topic">
- <Property name="bootstrap.servers">localhost:9092</Property>
- <Property name="timeout.ms">1000</Property>
- </Kafka>
- <Kafka name="KafkaAppenderWithLayout" topic="kafka-topic">
- <PatternLayout pattern="[%m]"/>
- <Property name="bootstrap.servers">localhost:9092</Property>
- <Property name="timeout.ms">1000</Property>
- </Kafka>
- <Kafka name="KafkaAppenderWithSerializedLayout" topic="kafka-topic">
- <SerializedLayout/>
- <Property name="bootstrap.servers">localhost:9092</Property>
- <Property name="timeout.ms">1000</Property>
- </Kafka>
- <Kafka name="AsyncKafkaAppender" topic="kafka-topic">
- <Property name="bootstrap.servers">localhost:9092</Property>
- <Property name="syncSend">false</Property>
- </Kafka>
- </Appenders>
- <Loggers>
- <Root level="info">
- <AppenderRef ref="KafkaAppender"/>
- <AppenderRef ref="KafkaAppenderWithLayout"/>
- <AppenderRef ref="KafkaAppenderWithSerializedLayout"/>
- <AppenderRef ref="AsyncKafkaAppender"/>
- </Root>
- </Loggers>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache license, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the license for the specific language governing permissions and
+ ~ limitations under the license.
+ -->
+<Configuration name="KafkaAppenderTest" status="OFF">
+ <Appenders>
+ <Kafka name="KafkaAppenderWithLayout" topic="kafka-topic">
+ <PatternLayout pattern="[%m]"/>
+ <Property name="bootstrap.servers">localhost:9092</Property>
+ <Property name="timeout.ms">1000</Property>
+ </Kafka>
+ <Kafka name="KafkaAppenderWithSerializedLayout" topic="kafka-topic">
+ <SerializedLayout/>
+ <Property name="bootstrap.servers">localhost:9092</Property>
+ <Property name="timeout.ms">1000</Property>
+ </Kafka>
+ <Kafka name="AsyncKafkaAppender" topic="kafka-topic">
+ <PatternLayout pattern="%m"/>
+ <Property name="bootstrap.servers">localhost:9092</Property>
+ <Property name="syncSend">false</Property>
+ </Kafka>
+ </Appenders>
+ <Loggers>
+ <Root level="info">
+ <AppenderRef ref="KafkaAppenderWithLayout"/>
+ <AppenderRef ref="KafkaAppenderWithSerializedLayout"/>
+ <AppenderRef ref="AsyncKafkaAppender"/>
+ </Root>
+ </Loggers>
</Configuration>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c14eb272/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 326cdc7..69c8b53 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -31,6 +31,9 @@
- "remove" - Removed
-->
<release version="2.9.0" date="2017-MM-DD" description="GA Release 2.9.0">
+ <action issue="LOG4J2-2020" dev="mikes" type="update">
+ Remove default layout from KafkaAppender.
+ </action>
<action issue="LOG4J2-2018" dev="rpopma" type="fix">
Fix incorrect documentation for LoggerNameLevelRewritePolicy.
</action>
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c14eb272/src/site/xdoc/manual/appenders.xml
----------------------------------------------------------------------
diff --git a/src/site/xdoc/manual/appenders.xml b/src/site/xdoc/manual/appenders.xml
index 3b7aa03..f24888e 100644
--- a/src/site/xdoc/manual/appenders.xml
+++ b/src/site/xdoc/manual/appenders.xml
@@ -1744,9 +1744,8 @@ public class JpaLogEntity extends AbstractLogEventWrapperEntity {
<td>layout</td>
<td>Layout</td>
<td>
- The Layout to use to format the LogEvent. If you do not specify a layout, the appender will send the
- <a class="javadoc" href="http://logging.apache.org/log4j/2.x/log4j-api/apidocs/org/apache/logging/log4j/message/Message.html#getFormattedMessage())">formatted message</a>
- to Kafka as a UTF-8 encoded string.
+ The Layout to use to format the LogEvent. Required, there is no default.
+ <em>New since 2.9, in previous versions <PatternLayout pattern="%m"/> was default.</em>
</td>
</tr>
<tr>