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 2016/12/13 03:03:18 UTC
logging-log4j2 git commit: [LOG4J2-969] Refactor SyslogAppender so
that Layout is a Plugin element.
Repository: logging-log4j2
Updated Branches:
refs/heads/master f95c7eb91 -> 19d775868
[LOG4J2-969] Refactor SyslogAppender so that Layout is a Plugin element.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/19d77586
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/19d77586
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/19d77586
Branch: refs/heads/master
Commit: 19d7758689961cf8134879f75d897fd006930efd
Parents: f95c7eb
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Dec 12 19:03:14 2016 -0800
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Dec 12 19:03:14 2016 -0800
----------------------------------------------------------------------
.../log4j/core/appender/SyslogAppender.java | 17 +++---
.../log4j/core/layout/Rfc5424Layout.java | 4 ++
.../logging/log4j/core/layout/SyslogLayout.java | 10 ++++
.../log4j/core/appender/SyslogAppenderTest.java | 22 ++++---
.../core/appender/SyslogAppenderTestBase.java | 63 +++++++++++++++-----
.../core/appender/TlsSyslogAppenderTest.java | 10 ++--
src/changes/changes.xml | 3 +
src/site/xdoc/manual/appenders.xml | 5 ++
8 files changed, 98 insertions(+), 36 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/19d77586/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/SyslogAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/SyslogAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/SyslogAppender.java
index 63e9483..bdfa41d 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/SyslogAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/SyslogAppender.java
@@ -103,18 +103,21 @@ public class SyslogAppender extends SocketAppender {
@PluginElement("LoggerFields")
private LoggerFields[] loggerFields;
+ @SuppressWarnings("resource")
@Override
public SyslogAppender build() {
final Protocol protocol = getProtocol();
final SslConfiguration sslConfiguration = getSslConfiguration();
final boolean useTlsMessageFormat = sslConfiguration != null || protocol == Protocol.SSL;
final Configuration configuration = getConfiguration();
- final Layout<? extends Serializable> layout = RFC5424.equalsIgnoreCase(format)
- ? Rfc5424Layout.createLayout(facility, id, enterpriseNumber, includeMdc, mdcId, mdcPrefix,
- eventPrefix, newLine, escapeNL, appName, msgId, excludes, includes, required,
- exceptionPattern, useTlsMessageFormat, loggerFields, configuration)
- :
- // @formatter:off
+ Layout<? extends Serializable> layout = getLayout();
+ if (layout == null) {
+ layout = RFC5424.equalsIgnoreCase(format)
+ ? Rfc5424Layout.createLayout(facility, id, enterpriseNumber, includeMdc, mdcId, mdcPrefix,
+ eventPrefix, newLine, escapeNL, appName, msgId, excludes, includes, required,
+ exceptionPattern, useTlsMessageFormat, loggerFields, configuration)
+ :
+ // @formatter:off
SyslogLayout.newBuilder()
.setFacility(facility)
.setIncludeNewLine(newLine)
@@ -122,7 +125,7 @@ public class SyslogAppender extends SocketAppender {
.setCharset(charsetName)
.build();
// @formatter:off
-
+ }
final String name = getName();
if (name == null) {
LOGGER.error("No name provided for SyslogAppender");
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/19d77586/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java
index b5c57a1..3e8b7ab 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java
@@ -719,4 +719,8 @@ public final class Rfc5424Layout extends AbstractStringLayout {
return this.fields;
}
}
+
+ public Facility getFacility() {
+ return facility;
+ }
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/19d77586/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/SyslogLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/SyslogLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/SyslogLayout.java
index 0b47364..96c0ae5 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/SyslogLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/SyslogLayout.java
@@ -199,6 +199,7 @@ public final class SyslogLayout extends AbstractStringLayout {
/**
* Creates a SyslogLayout.
+ *
* @param facility The Facility is used to try to classify the message.
* @param includeNewLine If true a newline will be appended to the result.
* @param escapeNL Pattern to use for replacing newlines.
@@ -214,4 +215,13 @@ public final class SyslogLayout extends AbstractStringLayout {
@PluginAttribute(value = "charset", defaultString = "UTF-8") final Charset charset) {
return new SyslogLayout(facility, includeNewLine, escapeNL, charset);
}
+
+ /**
+ * Gets the facility.
+ *
+ * @return the facility
+ */
+ public Facility getFacility() {
+ return facility;
+ }
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/19d77586/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SyslogAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SyslogAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SyslogAppenderTest.java
index 79213b3..741a51f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SyslogAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SyslogAppenderTest.java
@@ -19,6 +19,7 @@ package org.apache.logging.log4j.core.appender;
import java.io.IOException;
import java.net.SocketException;
+import org.apache.logging.log4j.core.appender.SyslogAppender.Builder;
import org.apache.logging.log4j.core.net.Protocol;
import org.apache.logging.log4j.core.net.mock.MockSyslogServerFactory;
import org.apache.logging.log4j.util.EnglishEnums;
@@ -52,16 +53,16 @@ public class SyslogAppenderTest extends SyslogAppenderTestBase {
public void testTCPAppender() throws Exception {
initTCPTestEnvironment(null);
- sendAndCheckLegacyBSDMessage("This is a test message");
- sendAndCheckLegacyBSDMessage("This is a test message 2");
+ sendAndCheckLegacyBsdMessage("This is a test message");
+ sendAndCheckLegacyBsdMessage("This is a test message 2");
}
@Test
public void testDefaultAppender() throws Exception {
initTCPTestEnvironment(null);
- sendAndCheckLegacyBSDMessage("This is a test message");
- sendAndCheckLegacyBSDMessage("This is a test message 2");
+ sendAndCheckLegacyBsdMessage("This is a test message");
+ sendAndCheckLegacyBsdMessage("This is a test message 2");
}
@Test
@@ -75,7 +76,7 @@ public class SyslogAppenderTest extends SyslogAppenderTestBase {
public void testUDPAppender() throws Exception {
initUDPTestEnvironment("bsd");
- sendAndCheckLegacyBSDMessage("This is a test message");
+ sendAndCheckLegacyBsdMessage("This is a test message");
root.removeAppender(appender);
appender.stop();
}
@@ -103,12 +104,16 @@ public class SyslogAppenderTest extends SyslogAppenderTestBase {
protected void initAppender(final String transportFormat, final String messageFormat) {
appender = createAppender(transportFormat, messageFormat);
+ validate(appender);
appender.start();
initRootLogger(appender);
}
- private SyslogAppender createAppender(final String protocol, final String format) {
- final boolean newLine = includeNewLine;
+ protected SyslogAppender createAppender(final String protocol, final String format) {
+ return newSyslogAppenderBuilder(protocol, format, includeNewLine).build();
+ }
+
+ protected Builder newSyslogAppenderBuilder(final String protocol, final String format, final boolean newLine) {
// @formatter:off
return SyslogAppender.newSyslogAppenderBuilder()
.withPort(PORTNUM)
@@ -122,8 +127,7 @@ public class SyslogAppenderTest extends SyslogAppenderTestBase {
.setNewLine(newLine)
.setAppName("TestApp")
.setMsgId("Test")
- .setFormat(format)
- .build();
+ .setFormat(format);
// @formatter:on
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/19d77586/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SyslogAppenderTestBase.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SyslogAppenderTestBase.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SyslogAppenderTestBase.java
index 11a8275..17ffbe4 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SyslogAppenderTestBase.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SyslogAppenderTestBase.java
@@ -16,6 +16,7 @@
*/
package org.apache.logging.log4j.core.appender;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@@ -25,16 +26,22 @@ import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.MarkerManager;
import org.apache.logging.log4j.ThreadContext;
import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.Logger;
import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.layout.Rfc5424Layout;
+import org.apache.logging.log4j.core.layout.SyslogLayout;
+import org.apache.logging.log4j.core.net.Facility;
+import org.apache.logging.log4j.core.net.Priority;
import org.apache.logging.log4j.core.net.mock.MockSyslogServer;
import org.apache.logging.log4j.message.StructuredDataMessage;
import org.apache.logging.log4j.util.Strings;
+import org.junit.Assert;
import org.junit.BeforeClass;
import static org.junit.Assert.*;
-public class SyslogAppenderTestBase {
+public abstract class SyslogAppenderTestBase {
protected static final String line1 =
"TestApp - Audit [Transfer@18060 Amount=\"200.00\" FromAccount=\"123457\" ToAccount=\"123456\"]" +
"[RequestContext@18060 ipAddress=\"192.168.0.120\" loginId=\"JohnDoe\"] Transfer Complete";
@@ -52,40 +59,40 @@ public class SyslogAppenderTestBase {
LoggerContext.getContext().reconfigure();
}
- protected void sendAndCheckLegacyBSDMessages(final List<String> messagesToSend) throws InterruptedException {
+ protected void sendAndCheckLegacyBsdMessages(final List<String> messagesToSend) throws InterruptedException {
for (final String message : messagesToSend) {
- sendLegacyBSDMessage(message);
+ sendDebugLegacyBsdMessage(message);
}
checkTheNumberOfSentAndReceivedMessages();
- checkTheEqualityOfSentAndReceivedMessages();
+ checkTheEqualityOfSentAndReceivedMessages(Level.DEBUG);
}
- protected void sendAndCheckLegacyBSDMessage(final String message) throws InterruptedException {
- sendLegacyBSDMessage(message);
+ protected void sendAndCheckLegacyBsdMessage(final String message) throws InterruptedException {
+ sendDebugLegacyBsdMessage(message);
checkTheNumberOfSentAndReceivedMessages();
- checkTheEqualityOfSentAndReceivedMessages();
+ checkTheEqualityOfSentAndReceivedMessages(Level.DEBUG);
}
- protected void sendLegacyBSDMessage(final String message) {
+ protected void sendDebugLegacyBsdMessage(final String message) {
sentMessages.add(message);
root.debug(message);
}
protected void sendAndCheckStructuredMessages(final int numberOfMessages) throws InterruptedException {
for (int i = 0; i < numberOfMessages; i++) {
- sendStructuredMessage();
+ sendInfoStructuredMessage();
}
checkTheNumberOfSentAndReceivedMessages();
- checkTheEqualityOfSentAndReceivedMessages();
+ checkTheEqualityOfSentAndReceivedMessages(Level.INFO);
}
protected void sendAndCheckStructuredMessage() throws InterruptedException {
- sendStructuredMessage();
+ sendInfoStructuredMessage();
checkTheNumberOfSentAndReceivedMessages();
- checkTheEqualityOfSentAndReceivedMessages();
+ checkTheEqualityOfSentAndReceivedMessages(Level.INFO);
}
- protected void sendStructuredMessage() {
+ protected void sendInfoStructuredMessage() {
ThreadContext.put("loginId", "JohnDoe");
ThreadContext.put("ipAddress", "192.168.0.120");
ThreadContext.put("locale", Locale.US.getDisplayName());
@@ -104,16 +111,19 @@ public class SyslogAppenderTestBase {
sentMessages.size(), getReceivedMessages(DEFAULT_TIMEOUT_IN_MS).size());
}
- protected void checkTheEqualityOfSentAndReceivedMessages() throws InterruptedException {
+ protected void checkTheEqualityOfSentAndReceivedMessages(Level expectedLevel) throws InterruptedException {
final List<String> receivedMessages = getReceivedMessages(DEFAULT_TIMEOUT_IN_MS);
assertNotNull("No messages received", receivedMessages);
for (int i = 0; i < receivedMessages.size(); i++) {
final String receivedMessage = receivedMessages.get(i);
final String sentMessage = sentMessages.get(i);
- final String suffix = includeNewLine ? "\n" : Strings.EMPTY;
+ final String suffix = includeNewLine ? "\n" : Strings.EMPTY;
assertTrue("Incorrect message received: " + receivedMessage,
receivedMessage.endsWith(sentMessage + suffix) || receivedMessage.contains(sentMessage));
+ final int expectedPriority = Priority.getPriority(getExpectedFacility(), expectedLevel);
+ assertTrue("Expected facility " + expectedPriority + " in message " + receivedMessage,
+ receivedMessage.startsWith("<" + expectedPriority + ">"));
}
}
@@ -138,4 +148,27 @@ public class SyslogAppenderTestBase {
}
return syslogServer.getMessageList();
}
+
+ protected Facility getExpectedFacility() {
+ return Facility.LOCAL0;
+ }
+
+ protected void validate(SyslogAppender syslogAppender) {
+ final Layout<? extends Serializable> layout = syslogAppender.getLayout();
+ if (layout instanceof SyslogLayout) {
+ validate((SyslogLayout) layout);
+ } else if (layout instanceof Rfc5424Layout) {
+ validate((Rfc5424Layout) layout);
+ } else {
+ Assert.fail("Unexpected layout: " + layout);
+ }
+ }
+
+ protected void validate(Rfc5424Layout layout) {
+ Assert.assertEquals(getExpectedFacility(), layout.getFacility());
+ }
+
+ protected void validate(SyslogLayout layout) {
+ Assert.assertEquals(getExpectedFacility(), layout.getFacility());
+ }
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/19d77586/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/TlsSyslogAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/TlsSyslogAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/TlsSyslogAppenderTest.java
index 4e4eb43..e025fd8 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/TlsSyslogAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/TlsSyslogAppenderTest.java
@@ -52,16 +52,15 @@ public class TlsSyslogAppenderTest extends SyslogAppenderTest {
final char[] msg = new char[2 * 1024 * 2014 + prefix.length()];
Arrays.fill(msg, 'a');
System.arraycopy(prefix.toCharArray(), 0, msg, 0, prefix.length());
- sendAndCheckLegacyBSDMessage(new String(msg));
+ sendAndCheckLegacyBsdMessage(new String(msg));
}
@Test
public void sendLegacyBsdMessagesOverTls() throws IOException, InterruptedException {
final int numberOfMessages = 100;
- initTlsTestEnvironment(100, TlsSyslogMessageFormat.LEGACY_BSD);
-
- final List<String> sentMessages = TlsSyslogTestUtil.generateMessages(numberOfMessages, TlsSyslogMessageFormat.LEGACY_BSD);
- sendAndCheckLegacyBSDMessages(sentMessages);
+ initTlsTestEnvironment(numberOfMessages, TlsSyslogMessageFormat.LEGACY_BSD);
+ final List<String> generatedMessages = TlsSyslogTestUtil.generateMessages(numberOfMessages, TlsSyslogMessageFormat.LEGACY_BSD);
+ sendAndCheckLegacyBsdMessages(generatedMessages);
}
@Test
@@ -110,6 +109,7 @@ public class TlsSyslogAppenderTest extends SyslogAppenderTest {
protected void initAppender() {
appender = createAppender();
+ validate(appender);
appender.start();
initRootLogger(appender);
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/19d77586/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 05eb33c..b2a3f94 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -189,6 +189,9 @@
<action issue="LOG4J2-1700" dev="ggregory" type="update">
Update Jansi from 1.13 to 1.14.
</action>
+ <action issue="LOG4J2-969" dev="ggregory" type="add">
+ Refactor SyslogAppender so that Layout is a Plugin element.
+ </action>
<action issue="LOG4J2-1660" dev="rpopma" type="add">
Added public method ThreadContext::getThreadContextMap; removed class ThreadContextAccess.
</action>
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/19d77586/src/site/xdoc/manual/appenders.xml
----------------------------------------------------------------------
diff --git a/src/site/xdoc/manual/appenders.xml b/src/site/xdoc/manual/appenders.xml
index 54c554c..41d798e 100644
--- a/src/site/xdoc/manual/appenders.xml
+++ b/src/site/xdoc/manual/appenders.xml
@@ -3935,6 +3935,11 @@ public class JpaLogEntity extends AbstractLogEventWrapperEntity {
Defaults to true.</td>
</tr>
<tr>
+ <td>Layout</td>
+ <td>Layout</td>
+ <td>A custom layout which overrides the <code>format</code> setting.</td>
+ </tr>
+ <tr>
<td>loggerFields</td>
<td>List of KeyValuePairs</td>
<td>Allows arbitrary PatternLayout patterns to be included as specified ThreadContext fields; no default