You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by ca...@apache.org on 2006/08/31 07:20:04 UTC
svn commit: r438801 - in /logging/log4j/trunk:
src/java/org/apache/log4j/helpers/SyslogWriter.java
src/java/org/apache/log4j/net/SyslogAppender.java
tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java
Author: carnold
Date: Wed Aug 30 22:20:03 2006
New Revision: 438801
URL: http://svn.apache.org/viewvc?rev=438801&view=rev
Log:
Bug 39687: Enable configuring port for SyslogAppender
Modified:
logging/log4j/trunk/src/java/org/apache/log4j/helpers/SyslogWriter.java
logging/log4j/trunk/src/java/org/apache/log4j/net/SyslogAppender.java
logging/log4j/trunk/tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java
Modified: logging/log4j/trunk/src/java/org/apache/log4j/helpers/SyslogWriter.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/java/org/apache/log4j/helpers/SyslogWriter.java?rev=438801&r1=438800&r2=438801&view=diff
==============================================================================
--- logging/log4j/trunk/src/java/org/apache/log4j/helpers/SyslogWriter.java (original)
+++ logging/log4j/trunk/src/java/org/apache/log4j/helpers/SyslogWriter.java Wed Aug 30 22:20:03 2006
@@ -27,6 +27,8 @@
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
+import java.net.URL;
+import java.net.MalformedURLException;
/**
@@ -39,19 +41,59 @@
final int SYSLOG_PORT = 514;
String syslogHost;
private InetAddress address;
+ private final int port;
private DatagramSocket ds;
private Logger logger = LogManager.getLogger(SyslogWriter.class);
StringBuffer buf = new StringBuffer();
- public SyslogWriter(String syslogHost) {
+ /**
+ * Constructs a new instance of SyslogWriter.
+ * @param syslogHost host name, may not be null. A port
+ * may be specified by following the name or IPv4 literal address with
+ * a colon and a decimal port number. To specify a port with an IPv6
+ * address, enclose the IPv6 address in square brackets before appending
+ * the colon and decimal port number.
+ */
+ public SyslogWriter(final String syslogHost) {
this.syslogHost = syslogHost;
+ if (syslogHost == null) {
+ throw new NullPointerException("syslogHost");
+ }
+
+ String host = syslogHost;
+ int urlPort = -1;
+
+ //
+ // If not an unbracketed IPv6 address then
+ // parse as a URL
+ //
+ if (host.indexOf("[") != -1 || host.indexOf(':') == host.lastIndexOf(':')) {
+ try {
+ URL url = new URL("http://" + host);
+ if (url.getHost() != null) {
+ host = url.getHost();
+ // if host is a IPv6 literal, strip off the brackets
+ if(host.startsWith("[") && host.charAt(host.length() - 1) == ']') {
+ host = host.substring(1, host.length() - 1);
+ }
+ urlPort = url.getPort();
+ }
+ } catch(MalformedURLException e) {
+ logger.warn("Malformed URL: will attempt to interpret as InetAddress.", e);
+ }
+ }
+
+ if (urlPort == -1) {
+ urlPort = SYSLOG_PORT;
+ }
+ port = urlPort;
try {
- this.address = InetAddress.getByName(syslogHost);
+ this.address = InetAddress.getByName(host);
} catch (UnknownHostException e) {
logger.error(
- "Could not find " + syslogHost + ". All logging will FAIL.", e);
+ "Could not find " + host + ". All logging will FAIL.", e);
}
try {
@@ -59,7 +101,7 @@
} catch (SocketException e) {
e.printStackTrace();
logger.error(
- "Could not instantiate DatagramSocket to " + syslogHost
+ "Could not instantiate DatagramSocket to " + host
+ ". All logging will FAIL.", e);
}
}
@@ -77,7 +119,7 @@
logger.debug("Writing out [{}]", buf);
byte[] bytes = buf.toString().getBytes();
DatagramPacket packet =
- new DatagramPacket(bytes, bytes.length, address, SYSLOG_PORT);
+ new DatagramPacket(bytes, bytes.length, address, port);
if (this.ds != null && this.address != null) {
ds.send(packet);
Modified: logging/log4j/trunk/src/java/org/apache/log4j/net/SyslogAppender.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/java/org/apache/log4j/net/SyslogAppender.java?rev=438801&r1=438800&r2=438801&view=diff
==============================================================================
--- logging/log4j/trunk/src/java/org/apache/log4j/net/SyslogAppender.java (original)
+++ logging/log4j/trunk/src/java/org/apache/log4j/net/SyslogAppender.java Wed Aug 30 22:20:03 2006
@@ -286,7 +286,9 @@
/**
* The <b>SyslogHost</b> option is the name of the the syslog host where log
- * output should go.
+ * output should go. A non-default port can be specified by
+ * appending a colon and port number to a host name,
+ * an IPv4 address or an IPv6 address enclosed in square brackets.
*
* <b>WARNING</b> If the SyslogHost is not set, then this appender will fail.
*/
Modified: logging/log4j/trunk/tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java?rev=438801&r1=438800&r2=438801&view=diff
==============================================================================
--- logging/log4j/trunk/tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java (original)
+++ logging/log4j/trunk/tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java Wed Aug 30 22:20:03 2006
@@ -351,4 +351,47 @@
"Expected message from log4j unit test SyslogAppenderTest.testAppend.", e);
assertEquals(0, errorHandler.size());
}
+
+ /**
+ * Tests SyslogAppender with IPv6 address.
+ */
+ public void testIPv6() {
+ SyslogAppender appender = new SyslogAppender();
+ appender.setSyslogHost("::1");
+ }
+
+ /**
+ * Tests SyslogAppender with IPv6 address enclosed in square brackets.
+ */
+ public void testIPv6InBrackets() {
+ SyslogAppender appender = new SyslogAppender();
+ appender.setSyslogHost("[::1]");
+ }
+
+ /**
+ * Tests SyslogAppender with IPv6 address enclosed in square brackets
+ * followed by port specification.
+ */
+ public void testIPv6AndPort() {
+ SyslogAppender appender = new SyslogAppender();
+ appender.setSyslogHost("[::1]:1514");
+ }
+
+ /**
+ * Tests SyslogAppender with host name enclosed in square brackets
+ * followed by port specification.
+ */
+ public void testHostNameAndPort() {
+ SyslogAppender appender = new SyslogAppender();
+ appender.setSyslogHost("localhost:1514");
+ }
+
+
+ /**
+ * Tests SyslogAppender with IPv4 address followed by port specification.
+ */
+ public void testIPv4AndPort() {
+ SyslogAppender appender = new SyslogAppender();
+ appender.setSyslogHost("127.0.0.1:1514");
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org