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 2021/12/17 03:37:43 UTC

[logging-log4j2] branch release-2.x updated: [LOG4J2-3237] Log4j 1.2 bridge API hard codes protocol to TCP.

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch release-2.x
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git


The following commit(s) were added to refs/heads/release-2.x by this push:
     new 885ca8d  [LOG4J2-3237] Log4j 1.2 bridge API hard codes protocol to TCP.
885ca8d is described below

commit 885ca8deb335065323323e78bbb6e52841d884bd
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Thu Dec 16 22:37:36 2021 -0500

    [LOG4J2-3237] Log4j 1.2 bridge API hard codes protocol to TCP.
---
 .../builders/appender/SyslogAppenderBuilder.java   | 15 +++-
 .../log4j/config/Log4j1ConfigurationFactory.java   |  2 +-
 .../log4j/config/PropertiesConfiguration.java      | 26 +++----
 .../org/apache/log4j/config/PropertySetter.java    | 18 ++---
 .../java/org/apache/log4j/Log4j1Constants.java     | 23 ------
 .../org/apache/log4j/config/AsyncAppenderTest.java | 18 ++---
 .../org/apache/log4j/config/AutoConfigTest.java    | 12 +--
 .../config/Log4j1ConfigurationFactoryTest.java     | 18 ++---
 .../log4j/config/MapRewriteAppenderTest.java       | 16 ++--
 .../config/PropertiesConfigurationFactoryTest.java |  8 +-
 .../log4j/config/PropertiesConfigurationTest.java  | 44 ++++-------
 .../config/PropertiesReconfigurationTest.java      | 26 ++-----
 .../PropertiesRollingWithPropertiesTest.java       | 17 +----
 .../apache/log4j/config/RewriteAppenderTest.java   | 14 ++--
 .../config/SyslogAppenderConfigurationTest.java    | 86 ++++++++++++++++++++++
 .../apache/log4j/config/SyslogAppenderTest.java    |  6 +-
 .../org/apache/log4j/config/TestConfigurator.java  | 55 ++++++++++++++
 .../log4j/config/XmlConfigurationFactoryTest.java  |  7 +-
 .../apache/log4j/config/XmlConfigurationTest.java  | 41 +++--------
 .../log4j/config/XmlReconfigurationTest.java       | 27 ++-----
 .../log4j1-syslog-protocol-default.properties      |  9 +++
 .../log4j1-syslog-protocol-tcp.properties          | 10 +++
 ...1-syslog.xml => log4j1-syslog-protocol-tcp.xml} |  3 +-
 .../log4j1-syslog-protocol-udp.properties          | 10 +++
 ...1-syslog.xml => log4j1-syslog-protocol-udp.xml} |  3 +-
 log4j-1.2-api/src/test/resources/log4j1-syslog.xml |  2 +-
 src/changes/changes.xml                            |  5 +-
 27 files changed, 299 insertions(+), 222 deletions(-)

diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/SyslogAppenderBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/SyslogAppenderBuilder.java
index a438895..f63a622 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/SyslogAppenderBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/SyslogAppenderBuilder.java
@@ -62,6 +62,8 @@ public class SyslogAppenderBuilder extends AbstractBuilder implements AppenderBu
     private static final Logger LOGGER = StatusLogger.getLogger();
     private static final String FACILITY_PARAM = "Facility";
     private static final String SYSLOG_HOST_PARAM = "SyslogHost";
+    private static final String PROTOCOL_PARAM = "protocol";
+
 
     public SyslogAppenderBuilder() {
     }
@@ -78,6 +80,7 @@ public class SyslogAppenderBuilder extends AbstractBuilder implements AppenderBu
         AtomicReference<String> facility = new AtomicReference<>();
         AtomicReference<String> level = new AtomicReference<>();
         AtomicReference<String> host = new AtomicReference<>();
+        AtomicReference<Protocol> protocol = new AtomicReference<>();
         forEachElement(appenderElement.getChildNodes(), currentElement -> {
             switch (currentElement.getTagName()) {
                 case LAYOUT_TAG:
@@ -104,13 +107,16 @@ public class SyslogAppenderBuilder extends AbstractBuilder implements AppenderBu
                             }
                             break;
                         }
+                        case PROTOCOL_PARAM:
+                            protocol.set(Protocol.valueOf(currentElement.getAttribute(VALUE_ATTR)));
+                            break;
                     }
                     break;
                 }
             }
         });
 
-        return createAppender(name, config, layout.get(), facility.get(), filter.get(), host.get(), level.get());
+        return createAppender(name, config, layout.get(), facility.get(), filter.get(), host.get(), level.get(), protocol.get());
     }
 
 
@@ -122,12 +128,13 @@ public class SyslogAppenderBuilder extends AbstractBuilder implements AppenderBu
         String level = getProperty(THRESHOLD_PARAM);
         String facility = getProperty(FACILITY_PARAM, DEFAULT_FACILITY);
         String syslogHost = getProperty(SYSLOG_HOST_PARAM, DEFAULT_HOST + ":" + DEFAULT_PORT);
+        String protocol = getProperty(PROTOCOL_PARAM, Protocol.TCP.name());
 
-        return createAppender(name, configuration, layout, facility, filter, syslogHost, level);
+        return createAppender(name, configuration, layout, facility, filter, syslogHost, level, Protocol.valueOf(protocol));
     }
 
     private Appender createAppender(final String name, final Log4j1Configuration configuration, Layout layout,
-            String facility, final Filter filter, final String syslogHost, final String level) {
+            String facility, final Filter filter, final String syslogHost, final String level, final Protocol protocol) {
         AtomicReference<String> host = new AtomicReference<>();
         AtomicInteger port = new AtomicInteger();
         resolveSyslogHost(syslogHost, host, port);
@@ -150,7 +157,7 @@ public class SyslogAppenderBuilder extends AbstractBuilder implements AppenderBu
                 .setLayout(appenderLayout)
                 .setFilter(fileFilter)
                 .withPort(port.get())
-                .withProtocol(Protocol.TCP)
+                .withProtocol(protocol)
                 .withHost(host.get())
                 .build());
     }
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationFactory.java b/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationFactory.java
index 83f6675..467d88d 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationFactory.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationFactory.java
@@ -37,7 +37,7 @@ import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration;
 // @Order(50)
 public class Log4j1ConfigurationFactory extends ConfigurationFactory {
 
-    private static final String[] SUFFIXES = {".properties"};
+    private static final String[] SUFFIXES = { ".properties" };
 
     @Override
     public Configuration getConfiguration(final LoggerContext loggerContext, final ConfigurationSource source) {
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertiesConfiguration.java b/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertiesConfiguration.java
index 4be864d..928f883 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertiesConfiguration.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertiesConfiguration.java
@@ -16,6 +16,19 @@
  */
 package org.apache.log4j.config;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.SortedMap;
+import java.util.StringTokenizer;
+import java.util.TreeMap;
+
 import org.apache.log4j.Appender;
 import org.apache.log4j.Layout;
 import org.apache.log4j.LogManager;
@@ -32,19 +45,6 @@ import org.apache.logging.log4j.core.config.LoggerConfig;
 import org.apache.logging.log4j.core.config.status.StatusConfiguration;
 import org.apache.logging.log4j.util.LoaderUtil;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.SortedMap;
-import java.util.StringTokenizer;
-import java.util.TreeMap;
-
 /**
  * Construct a configuration based on Log4j 1 properties.
  */
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertySetter.java b/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertySetter.java
index 5325761..b6cec96 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertySetter.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertySetter.java
@@ -19,15 +19,6 @@
 
 package org.apache.log4j.config;
 
-import org.apache.log4j.Appender;
-import org.apache.log4j.Level;
-import org.apache.log4j.Priority;
-import org.apache.log4j.spi.ErrorHandler;
-import org.apache.log4j.spi.OptionHandler;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.util.OptionConverter;
-import org.apache.logging.log4j.status.StatusLogger;
-
 import java.beans.BeanInfo;
 import java.beans.IntrospectionException;
 import java.beans.Introspector;
@@ -37,6 +28,15 @@ import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.Properties;
 
+import org.apache.log4j.Appender;
+import org.apache.log4j.Level;
+import org.apache.log4j.Priority;
+import org.apache.log4j.spi.ErrorHandler;
+import org.apache.log4j.spi.OptionHandler;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.util.OptionConverter;
+import org.apache.logging.log4j.status.StatusLogger;
+
 /**
  * General purpose Object property setter. Clients repeatedly invokes
  * {@link #setProperty setProperty(name,value)} in order to invoke setters
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/Log4j1Constants.java b/log4j-1.2-api/src/test/java/org/apache/log4j/Log4j1Constants.java
deleted file mode 100644
index b4f180d..0000000
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/Log4j1Constants.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * 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.
- */
-package org.apache.log4j;
-
-public class Log4j1Constants {
-
-    public static final String DEFAULT_CONFIGURATION_KEY = "log4j.configuration";
-
-}
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/config/AsyncAppenderTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/config/AsyncAppenderTest.java
index 1aed46e..8f7d26c 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/config/AsyncAppenderTest.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/config/AsyncAppenderTest.java
@@ -16,6 +16,15 @@
  */
 package org.apache.log4j.config;
 
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Map;
+
 import org.apache.log4j.ListAppender;
 import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
@@ -29,15 +38,6 @@ import org.apache.logging.log4j.core.config.Configurator;
 import org.apache.logging.log4j.spi.LoggerContextFactory;
 import org.junit.Test;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.util.List;
-import java.util.Map;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
 /**
  * Test configuration from XML.
  */
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/config/AutoConfigTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/config/AutoConfigTest.java
index 3e09ab2..f7cccf6 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/config/AutoConfigTest.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/config/AutoConfigTest.java
@@ -16,6 +16,12 @@
  */
 package org.apache.log4j.config;
 
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.List;
+import java.util.Map;
+
 import org.apache.log4j.ListAppender;
 import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
@@ -28,12 +34,6 @@ import org.apache.logging.log4j.spi.LoggerContext;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import java.util.List;
-import java.util.Map;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
 /**
  * Test configuration from XML.
  */
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/config/Log4j1ConfigurationFactoryTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/config/Log4j1ConfigurationFactoryTest.java
index 7d40a3c..205c876 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/config/Log4j1ConfigurationFactoryTest.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/config/Log4j1ConfigurationFactoryTest.java
@@ -52,6 +52,15 @@ import org.junit.Test;
 
 public class Log4j1ConfigurationFactoryTest {
 
+    static Configuration getConfiguration(final String configResource) throws URISyntaxException {
+        final URL configLocation = ClassLoader.getSystemResource(configResource);
+        assertNotNull(configResource, configLocation);
+        final Configuration configuration = new Log4j1ConfigurationFactory().getConfiguration(null, "test",
+                configLocation.toURI());
+        assertNotNull(configuration);
+        return configuration;
+    }
+
     private Layout<?> testConsole(final String configResource) throws Exception {
         final Configuration configuration = getConfiguration(configResource);
         final String name = "Console";
@@ -82,15 +91,6 @@ public class Log4j1ConfigurationFactoryTest {
 		return appender.getLayout();
 	}
 
-	private Configuration getConfiguration(final String configResource) throws URISyntaxException {
-		final URL configLocation = ClassLoader.getSystemResource(configResource);
-		assertNotNull(configResource, configLocation);
-		final Configuration configuration = new Log4j1ConfigurationFactory().getConfiguration(null, "test",
-				configLocation.toURI());
-		assertNotNull(configuration);
-		return configuration;
-	}
-
 	@Test
 	public void testConsoleEnhancedPatternLayout() throws Exception {
 		final PatternLayout layout = (PatternLayout) testConsole(
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/config/MapRewriteAppenderTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/config/MapRewriteAppenderTest.java
index 840971a..8983af8 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/config/MapRewriteAppenderTest.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/config/MapRewriteAppenderTest.java
@@ -16,6 +16,14 @@
  */
 package org.apache.log4j.config;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 import org.apache.log4j.ListAppender;
 import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
@@ -30,14 +38,6 @@ import org.junit.After;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
 /**
  * Test RewriteAppender
  */
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/config/PropertiesConfigurationFactoryTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/config/PropertiesConfigurationFactoryTest.java
index 22266ba..61523e2 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/config/PropertiesConfigurationFactoryTest.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/config/PropertiesConfigurationFactoryTest.java
@@ -16,16 +16,16 @@
  */
 package org.apache.log4j.config;
 
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+
 import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import java.io.File;
-
-import static org.junit.Assert.assertTrue;
-
 /**
  * Test configuration from Properties.
  */
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/config/PropertiesConfigurationTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/config/PropertiesConfigurationTest.java
index 1c9df9d..7dd768d 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/config/PropertiesConfigurationTest.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/config/PropertiesConfigurationTest.java
@@ -20,8 +20,6 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
 import java.util.List;
 import java.util.Map;
 
@@ -33,8 +31,6 @@ import org.apache.log4j.spi.LoggingEvent;
 import org.apache.logging.log4j.core.Appender;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.config.Configuration;
-import org.apache.logging.log4j.core.config.ConfigurationSource;
-import org.apache.logging.log4j.core.config.Configurator;
 import org.junit.Test;
 
 /**
@@ -43,22 +39,15 @@ import org.junit.Test;
 public class PropertiesConfigurationTest {
 
     @Test
-    public void testProperties() throws Exception {
-        try (LoggerContext loggerContext = configure("target/test-classes/log4j1-file.properties")) {
-            Logger logger = LogManager.getLogger("test");
-            logger.debug("This is a test of the root logger");
-            File file = new File("target/temp.A1");
-            assertTrue("File A1 was not created", file.exists());
-            assertTrue("File A1 is empty", file.length() > 0);
-            file = new File("target/temp.A2");
-            assertTrue("File A2 was not created", file.exists());
-            assertTrue("File A2 is empty", file.length() > 0);
+    public void testFilter() throws Exception {
+        try (LoggerContext loggerContext = TestConfigurator.configure("target/test-classes/LOG4J2-3247.properties")) {
+            // [LOG4J2-3247] configure() should not throw an NPE.
         }
     }
 
     @Test
     public void testListAppender() throws Exception {
-        try (LoggerContext loggerContext = configure("target/test-classes/log4j1-list.properties")) {
+        try (LoggerContext loggerContext = TestConfigurator.configure("target/test-classes/log4j1-list.properties")) {
             Logger logger = LogManager.getLogger("test");
             logger.debug("This is a test of the root logger");
             Configuration configuration = loggerContext.getConfiguration();
@@ -81,22 +70,17 @@ public class PropertiesConfigurationTest {
         }
     }
 
-    @SuppressWarnings("resource")
-    private LoggerContext configure(String configLocation) throws Exception {
-        File file = new File(configLocation);
-        InputStream is = new FileInputStream(file);
-        ConfigurationSource source = new ConfigurationSource(is, file);
-        LoggerContext context = (LoggerContext) org.apache.logging.log4j.LogManager.getContext(false);
-        Configuration configuration = new PropertiesConfigurationFactory().getConfiguration(context, source);
-        assertNotNull("No configuration created", configuration);
-        Configurator.reconfigure(configuration);
-        return context;
-    }
-    
     @Test
-    public void testFilter() throws Exception {
-        try (LoggerContext loggerContext = configure("target/test-classes/LOG4J2-3247.properties")) {
-            // configure() not thrown an NPE.
+    public void testProperties() throws Exception {
+        try (LoggerContext loggerContext = TestConfigurator.configure("target/test-classes/log4j1-file.properties")) {
+            Logger logger = LogManager.getLogger("test");
+            logger.debug("This is a test of the root logger");
+            File file = new File("target/temp.A1");
+            assertTrue("File A1 was not created", file.exists());
+            assertTrue("File A1 is empty", file.length() > 0);
+            file = new File("target/temp.A2");
+            assertTrue("File A2 was not created", file.exists());
+            assertTrue("File A2 is empty", file.length() > 0);
         }
     }
 
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/config/PropertiesReconfigurationTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/config/PropertiesReconfigurationTest.java
index 13e0035..30ef5b0 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/config/PropertiesReconfigurationTest.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/config/PropertiesReconfigurationTest.java
@@ -16,9 +16,11 @@
  */
 package org.apache.log4j.config;
 
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
@@ -27,16 +29,9 @@ import org.apache.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.config.ConfigurationListener;
-import org.apache.logging.log4j.core.config.ConfigurationSource;
-import org.apache.logging.log4j.core.config.Configurator;
 import org.apache.logging.log4j.core.config.Reconfigurable;
-import org.apache.logging.log4j.spi.LoggerContextFactory;
 import org.junit.Test;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
 /**
  * Test reconfiguring with an XML configuration.
  */
@@ -54,7 +49,7 @@ public class PropertiesReconfigurationTest {
         assertNotNull("No Config file", file);
         long configMillis = file.lastModified();
         assertTrue("Unable to modified file time", file.setLastModified(configMillis - FIVE_MINUTES));
-        LoggerContext context = configure(file);
+        LoggerContext context = TestConfigurator.configure(file.toString());
         Logger logger = LogManager.getLogger("test");
         logger.info("Hello");
         Configuration original = context.getConfiguration();
@@ -81,15 +76,4 @@ public class PropertiesReconfigurationTest {
         }
 
     }
-
-    private LoggerContext configure(File configFile) throws Exception {
-        InputStream is = new FileInputStream(configFile);
-        ConfigurationSource source = new ConfigurationSource(is, configFile);
-        LoggerContextFactory factory = org.apache.logging.log4j.LogManager.getFactory();
-        LoggerContext context = (LoggerContext) org.apache.logging.log4j.LogManager.getContext(false);
-        Configuration configuration = new PropertiesConfigurationFactory().getConfiguration(context, source);
-        assertNotNull("No configuration created", configuration);
-        Configurator.reconfigure(configuration);
-        return context;
-    }
 }
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/config/PropertiesRollingWithPropertiesTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/config/PropertiesRollingWithPropertiesTest.java
index 2d84f9e..cdb58a6 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/config/PropertiesRollingWithPropertiesTest.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/config/PropertiesRollingWithPropertiesTest.java
@@ -16,28 +16,15 @@
  */
 package org.apache.log4j.config;
 
+import static org.junit.Assert.assertTrue;
+
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.util.List;
-import java.util.Map;
 
-import org.apache.log4j.ListAppender;
 import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
-import org.apache.log4j.bridge.AppenderAdapter;
-import org.apache.log4j.spi.LoggingEvent;
-import org.apache.logging.log4j.core.Appender;
-import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.config.Configuration;
-import org.apache.logging.log4j.core.config.ConfigurationSource;
-import org.apache.logging.log4j.core.config.Configurator;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
 /**
  * Test configuration from Properties.
  */
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/config/RewriteAppenderTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/config/RewriteAppenderTest.java
index 7261172..63e2e72 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/config/RewriteAppenderTest.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/config/RewriteAppenderTest.java
@@ -16,6 +16,13 @@
  */
 package org.apache.log4j.config;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.List;
+import java.util.Map;
+
 import org.apache.log4j.ListAppender;
 import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
@@ -30,13 +37,6 @@ import org.junit.After;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import java.util.List;
-import java.util.Map;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
 /**
  * Test RewriteAppender
  */
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/config/SyslogAppenderConfigurationTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/config/SyslogAppenderConfigurationTest.java
new file mode 100644
index 0000000..31faf08
--- /dev/null
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/config/SyslogAppenderConfigurationTest.java
@@ -0,0 +1,86 @@
+/*
+ * 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.
+ */
+package org.apache.log4j.config;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.io.IOException;
+import java.util.Map;
+
+import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.core.appender.SocketAppender;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.net.AbstractSocketManager;
+import org.apache.logging.log4j.core.net.Protocol;
+import org.junit.Test;
+
+/**
+ * Class Description goes here.
+ */
+public class SyslogAppenderConfigurationTest {
+
+    private void checkProtocol(final Protocol expected, final Configuration configuration) {
+        final Map<String, Appender> appenders = configuration.getAppenders();
+        assertNotNull(appenders);
+        final String appenderName = "syslog";
+        final Appender appender = appenders.get(appenderName);
+        assertNotNull(appender, "Missing appender " + appenderName);
+        final SocketAppender socketAppender = (SocketAppender) appender;
+        @SuppressWarnings("resource")
+        final AbstractSocketManager manager = socketAppender.getManager();
+        assertTrue(manager.getName().startsWith(expected + ":"));
+    }
+
+    private void checkProtocolPropertiesConfig(final Protocol expected, final String xmlPath) throws IOException {
+        checkProtocol(expected, TestConfigurator.configure(xmlPath).getConfiguration());
+    }
+
+    private void checkProtocolXmlConfig(final Protocol expected, final String xmlPath) throws IOException {
+        checkProtocol(expected, TestConfigurator.configure(xmlPath).getConfiguration());
+    }
+
+    @Test
+    public void testPropertiesProtocolDefault() throws Exception {
+        checkProtocolPropertiesConfig(Protocol.TCP, "target/test-classes/log4j1-syslog-protocol-default.properties");
+    }
+
+    @Test
+    public void testPropertiesProtocolTcp() throws Exception {
+        checkProtocolPropertiesConfig(Protocol.TCP, "target/test-classes/log4j1-syslog-protocol-tcp.properties");
+    }
+
+    @Test
+    public void testPropertiesProtocolUdp() throws Exception {
+        checkProtocolPropertiesConfig(Protocol.UDP, "target/test-classes/log4j1-syslog-protocol-udp.properties");
+    }
+
+    @Test
+    public void testXmlProtocolDefault() throws Exception {
+        checkProtocolXmlConfig(Protocol.TCP, "target/test-classes/log4j1-syslog.xml");
+    }
+
+    @Test
+    public void testXmlProtocolTcp() throws Exception {
+        checkProtocolXmlConfig(Protocol.TCP, "target/test-classes/log4j1-syslog-protocol-tcp.xml");
+    }
+
+    @Test
+    public void testXmlProtocolUdp() throws Exception {
+        checkProtocolXmlConfig(Protocol.UDP, "target/test-classes/log4j1-syslog-protocol-udp.xml");
+    }
+}
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/config/SyslogAppenderTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/config/SyslogAppenderTest.java
index 4feba91..a6aa013 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/config/SyslogAppenderTest.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/config/SyslogAppenderTest.java
@@ -22,9 +22,9 @@ import static org.junit.Assert.assertNotNull;
 import java.io.IOException;
 import java.util.List;
 
-import org.apache.log4j.Log4j1Constants;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.core.net.mock.MockSyslogServer;
 import org.apache.logging.log4j.core.net.mock.MockSyslogServerFactory;
 import org.junit.After;
@@ -43,12 +43,12 @@ public class SyslogAppenderTest {
 
     @BeforeClass
     public static void beforeClass() {
-        System.setProperty(Log4j1Constants.DEFAULT_CONFIGURATION_KEY, "target/test-classes/log4j1-syslog.xml");
+        System.setProperty(ConfigurationFactory.LOG4J1_CONFIGURATION_FILE_PROPERTY, "target/test-classes/log4j1-syslog.xml");
     }
 
     @AfterClass
     public static void afterClass() {
-        System.clearProperty(Log4j1Constants.DEFAULT_CONFIGURATION_KEY);
+        System.clearProperty(ConfigurationFactory.LOG4J1_CONFIGURATION_FILE_PROPERTY);
     }
 
     @After
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/config/TestConfigurator.java b/log4j-1.2-api/src/test/java/org/apache/log4j/config/TestConfigurator.java
new file mode 100644
index 0000000..7cd39af
--- /dev/null
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/config/TestConfigurator.java
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ */
+package org.apache.log4j.config;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.jupiter.api.Assertions.fail;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+
+import org.apache.log4j.xml.XmlConfigurationFactory;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.config.ConfigurationSource;
+import org.apache.logging.log4j.core.config.Configurator;
+
+public class TestConfigurator {
+
+    @SuppressWarnings("resource")
+    static LoggerContext configure(String configLocation) throws IOException {
+        File file = new File(configLocation);
+        InputStream is = Files.newInputStream(Paths.get(configLocation));
+        ConfigurationSource source = new ConfigurationSource(is, file);
+        LoggerContext context = (LoggerContext) org.apache.logging.log4j.LogManager.getContext(false);
+        Configuration configuration = null;
+        if (configLocation.endsWith(PropertiesConfigurationFactory.FILE_EXTENSION)) {
+            configuration = new PropertiesConfigurationFactory().getConfiguration(context, source);
+        } else if (configLocation.endsWith(XmlConfigurationFactory.FILE_EXTENSION)) {
+            configuration = new XmlConfigurationFactory().getConfiguration(context, source);
+        } else {
+            fail("Test infra does not support " + configLocation);
+        }
+        assertNotNull("No configuration created", configuration);
+        Configurator.reconfigure(configuration);
+        return context;
+    }
+
+}
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/config/XmlConfigurationFactoryTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/config/XmlConfigurationFactoryTest.java
index b66e4b9..b1c6736 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/config/XmlConfigurationFactoryTest.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/config/XmlConfigurationFactoryTest.java
@@ -16,15 +16,16 @@
  */
 package org.apache.log4j.config;
 
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+
 import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import java.io.File;
-import static org.junit.Assert.assertTrue;
-
 /**
  * Test configuration from XML.
  */
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/config/XmlConfigurationTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/config/XmlConfigurationTest.java
index 950c561..1970f29 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/config/XmlConfigurationTest.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/config/XmlConfigurationTest.java
@@ -16,52 +16,31 @@
  */
 package org.apache.log4j.config;
 
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.util.List;
+import java.util.Map;
+
 import org.apache.log4j.ListAppender;
 import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
 import org.apache.log4j.bridge.AppenderAdapter;
 import org.apache.log4j.spi.LoggingEvent;
-import org.apache.log4j.xml.XmlConfigurationFactory;
 import org.apache.logging.log4j.core.Appender;
-import org.apache.logging.log4j.core.config.Configuration;
-import org.apache.logging.log4j.core.config.ConfigurationSource;
-import org.apache.logging.log4j.core.config.Configurator;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.spi.LoggerContextFactory;
+import org.apache.logging.log4j.core.config.Configuration;
 import org.junit.Test;
 
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.List;
-import java.util.Map;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
 /**
  * Test configuration from XML.
  */
 public class XmlConfigurationTest {
 
-    static LoggerContext configureXml(final String configLocation) throws IOException {
-        final Path path = Paths.get(configLocation);
-        final InputStream is = Files.newInputStream(path);
-        final ConfigurationSource source = new ConfigurationSource(is, path.toFile());
-        final LoggerContextFactory factory = org.apache.logging.log4j.LogManager.getFactory();
-        final LoggerContext context = (LoggerContext) org.apache.logging.log4j.LogManager.getContext(false);
-        final Configuration configuration = new XmlConfigurationFactory().getConfiguration(context, source);
-        assertNotNull("No configuration created", configuration);
-        Configurator.reconfigure(configuration);
-        return context;
-    }
-
     @Test
     public void testListAppender() throws Exception {
-        final LoggerContext loggerContext = configureXml("target/test-classes/log4j1-list.xml");
+        final LoggerContext loggerContext = TestConfigurator.configure("target/test-classes/log4j1-list.xml");
         final Logger logger = LogManager.getLogger("test");
         logger.debug("This is a test of the root logger");
         final Configuration configuration = loggerContext.getConfiguration();
@@ -85,7 +64,7 @@ public class XmlConfigurationTest {
 
     @Test
     public void testXML() throws Exception {
-        configureXml("target/test-classes/log4j1-file.xml");
+        TestConfigurator.configure("target/test-classes/log4j1-file.xml");
         final Logger logger = LogManager.getLogger("test");
         logger.debug("This is a test of the root logger");
         File file = new File("target/temp.A1");
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/config/XmlReconfigurationTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/config/XmlReconfigurationTest.java
index e657f0c..6c77877 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/config/XmlReconfigurationTest.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/config/XmlReconfigurationTest.java
@@ -16,28 +16,22 @@
  */
 package org.apache.log4j.config;
 
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
-import org.apache.log4j.xml.XmlConfigurationFactory;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.config.ConfigurationListener;
-import org.apache.logging.log4j.core.config.ConfigurationSource;
-import org.apache.logging.log4j.core.config.Configurator;
 import org.apache.logging.log4j.core.config.Reconfigurable;
-import org.apache.logging.log4j.spi.LoggerContextFactory;
 import org.junit.Test;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
 /**
  * Test reconfiguring with an XML configuration.
  */
@@ -55,7 +49,7 @@ public class XmlReconfigurationTest {
         assertNotNull("No Config file", file);
         long configMillis = file.lastModified();
         assertTrue("Unable to modified file time", file.setLastModified(configMillis - FIVE_MINUTES));
-        LoggerContext context = configure(file);
+        LoggerContext context = TestConfigurator.configure(file.toString());
         Logger logger = LogManager.getLogger("test");
         logger.info("Hello");
         Configuration original = context.getConfiguration();
@@ -82,15 +76,4 @@ public class XmlReconfigurationTest {
         }
 
     }
-
-    private LoggerContext configure(File configFile) throws Exception {
-        InputStream is = new FileInputStream(configFile);
-        ConfigurationSource source = new ConfigurationSource(is, configFile);
-        LoggerContextFactory factory = org.apache.logging.log4j.LogManager.getFactory();
-        LoggerContext context = (LoggerContext) org.apache.logging.log4j.LogManager.getContext(false);
-        Configuration configuration = new XmlConfigurationFactory().getConfiguration(context, source);
-        assertNotNull("No configuration created", configuration);
-        Configurator.reconfigure(configuration);
-        return context;
-    }
 }
diff --git a/log4j-1.2-api/src/test/resources/log4j1-syslog-protocol-default.properties b/log4j-1.2-api/src/test/resources/log4j1-syslog-protocol-default.properties
new file mode 100644
index 0000000..5501074
--- /dev/null
+++ b/log4j-1.2-api/src/test/resources/log4j1-syslog-protocol-default.properties
@@ -0,0 +1,9 @@
+log4j.rootLogger=DEBUG,syslog
+log4j.appender.syslog=org.apache.log4j.net.SyslogAppender
+log4j.appender.syslog.Threshold=DEBUG
+log4j.appender.syslog.syslogHost=localhost
+log4j.appender.syslog.port=9999
+log4j.appender.syslog.header=true
+log4j.appender.syslog.Facility=LOCAL3
+log4j.appender.syslog.layout=org.apache.log4j.PatternLayout
+log4j.appender.syslog.layout.conversionPattern=Main[%pid] :%t: %c %-4p - %m\n
diff --git a/log4j-1.2-api/src/test/resources/log4j1-syslog-protocol-tcp.properties b/log4j-1.2-api/src/test/resources/log4j1-syslog-protocol-tcp.properties
new file mode 100644
index 0000000..2b6b704
--- /dev/null
+++ b/log4j-1.2-api/src/test/resources/log4j1-syslog-protocol-tcp.properties
@@ -0,0 +1,10 @@
+log4j.rootLogger=DEBUG,syslog
+log4j.appender.syslog=org.apache.log4j.net.SyslogAppender
+log4j.appender.syslog.Threshold=DEBUG
+log4j.appender.syslog.syslogHost=localhost
+log4j.appender.syslog.port=9999
+log4j.appender.syslog.protocol=TCP
+log4j.appender.syslog.header=true
+log4j.appender.syslog.Facility=LOCAL3
+log4j.appender.syslog.layout=org.apache.log4j.PatternLayout
+log4j.appender.syslog.layout.conversionPattern=Main[%pid] :%t: %c %-4p - %m\n
diff --git a/log4j-1.2-api/src/test/resources/log4j1-syslog.xml b/log4j-1.2-api/src/test/resources/log4j1-syslog-protocol-tcp.xml
similarity index 95%
copy from log4j-1.2-api/src/test/resources/log4j1-syslog.xml
copy to log4j-1.2-api/src/test/resources/log4j1-syslog-protocol-tcp.xml
index 4fd96a8..47c3768 100644
--- a/log4j-1.2-api/src/test/resources/log4j1-syslog.xml
+++ b/log4j-1.2-api/src/test/resources/log4j1-syslog-protocol-tcp.xml
@@ -23,6 +23,7 @@
     <param name="Facility" value="USER"/>
     <param name="FacilityPrinting" value="true"/>
     <param name="Threshold" value="DEBUG"/>
+    <param name="protocol" value="TCP"/>
     <layout class="org.apache.log4j.PatternLayout">
       <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
     </layout>
@@ -33,4 +34,4 @@
     <appender-ref ref="syslog" />
   </root>
 
-</log4j:configuration>
\ No newline at end of file
+</log4j:configuration>
diff --git a/log4j-1.2-api/src/test/resources/log4j1-syslog-protocol-udp.properties b/log4j-1.2-api/src/test/resources/log4j1-syslog-protocol-udp.properties
new file mode 100644
index 0000000..1735ade
--- /dev/null
+++ b/log4j-1.2-api/src/test/resources/log4j1-syslog-protocol-udp.properties
@@ -0,0 +1,10 @@
+log4j.rootLogger=DEBUG,syslog
+log4j.appender.syslog=org.apache.log4j.net.SyslogAppender
+log4j.appender.syslog.Threshold=DEBUG
+log4j.appender.syslog.syslogHost=localhost
+log4j.appender.syslog.port=9999
+log4j.appender.syslog.protocol=UDP
+log4j.appender.syslog.header=true
+log4j.appender.syslog.Facility=LOCAL3
+log4j.appender.syslog.layout=org.apache.log4j.PatternLayout
+log4j.appender.syslog.layout.conversionPattern=Main[%pid] :%t: %c %-4p - %m\n
diff --git a/log4j-1.2-api/src/test/resources/log4j1-syslog.xml b/log4j-1.2-api/src/test/resources/log4j1-syslog-protocol-udp.xml
similarity index 95%
copy from log4j-1.2-api/src/test/resources/log4j1-syslog.xml
copy to log4j-1.2-api/src/test/resources/log4j1-syslog-protocol-udp.xml
index 4fd96a8..279ec94 100644
--- a/log4j-1.2-api/src/test/resources/log4j1-syslog.xml
+++ b/log4j-1.2-api/src/test/resources/log4j1-syslog-protocol-udp.xml
@@ -23,6 +23,7 @@
     <param name="Facility" value="USER"/>
     <param name="FacilityPrinting" value="true"/>
     <param name="Threshold" value="DEBUG"/>
+    <param name="protocol" value="UDP"/>
     <layout class="org.apache.log4j.PatternLayout">
       <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
     </layout>
@@ -33,4 +34,4 @@
     <appender-ref ref="syslog" />
   </root>
 
-</log4j:configuration>
\ No newline at end of file
+</log4j:configuration>
diff --git a/log4j-1.2-api/src/test/resources/log4j1-syslog.xml b/log4j-1.2-api/src/test/resources/log4j1-syslog.xml
index 4fd96a8..5b7021c 100644
--- a/log4j-1.2-api/src/test/resources/log4j1-syslog.xml
+++ b/log4j-1.2-api/src/test/resources/log4j1-syslog.xml
@@ -33,4 +33,4 @@
     <appender-ref ref="syslog" />
   </root>
 
-</log4j:configuration>
\ No newline at end of file
+</log4j:configuration>
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 57ae381..f54e627 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -29,7 +29,7 @@
          - "update" - Change
          - "remove" - Removed
     -->
-    <release version="2.16.1" date="2021-MM-dd" description="GA Release 2.16.1">
+    <release version="2.17.0" date="2021-MM-dd" description="GA Release 2.17.0">
       <action issue="LOG4J2-3242" dev="rgoers" type="fix">
         Limit JNDI to the java protocol only. JNDI will remain disabled by default. The enablement
         property has been renamed to 'log4j2.enableJndiJava'
@@ -44,6 +44,9 @@
       <action issue="LOG4J2-3249" dev="ggregory" type="fix">
         Log4j 1.2 bridge for Syslog Appender defaults to port 512 instead of 514.
       </action>
+      <action issue="LOG4J2-3237" dev="ggregory" type="fix">
+        Log4j 1.2 bridge API hard codes protocol to TCP.
+      </action>
     </release>
     <release version="2.16.0" date="2021-12-13" description="GA Release 2.16.0">
       <action issue="LOG4J2-3208" dev="rgoers" type="fix">