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 06:48:55 UTC
svn commit: r438792 - in /logging/log4j/branches/v1_2-branch:
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 21:48:55 2006
New Revision: 438792
URL: http://svn.apache.org/viewvc?rev=438792&view=rev
Log:
Bug 39687: Enable configuring port for SyslogAppender
Modified:
logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/helpers/SyslogWriter.java
logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/net/SyslogAppender.java
logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java
Modified: logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/helpers/SyslogWriter.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/helpers/SyslogWriter.java?rev=438792&r1=438791&r2=438792&view=diff
==============================================================================
--- logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/helpers/SyslogWriter.java (original)
+++ logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/helpers/SyslogWriter.java Wed Aug 30 21:48:55 2006
@@ -24,6 +24,8 @@
import java.net.UnknownHostException;
import java.net.SocketException;
import java.io.IOException;
+import java.net.URL;
+import java.net.MalformedURLException;
/**
SyslogWriter is a wrapper around the java.net.DatagramSocket class
@@ -34,20 +36,64 @@
public class SyslogWriter extends Writer {
final int SYSLOG_PORT = 514;
+ /**
+ * Host string from last constructed SyslogWriter.
+ * @deprecated
+ */
static String syslogHost;
private InetAddress address;
+ private final int port;
private DatagramSocket ds;
+ /**
+ * 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(String syslogHost) {
+ 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) {
+ LogLog.error("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) {
- LogLog.error("Could not find " + syslogHost +
+ LogLog.error("Could not find " + host +
". All logging will FAIL.", e);
}
@@ -56,9 +102,10 @@
}
catch (SocketException e) {
e.printStackTrace();
- LogLog.error("Could not instantiate DatagramSocket to " + syslogHost +
+ LogLog.error("Could not instantiate DatagramSocket to " + host +
". All logging will FAIL.", e);
}
+
}
@@ -71,7 +118,7 @@
void write(String string) throws IOException {
byte[] bytes = string.getBytes();
DatagramPacket packet = new DatagramPacket(bytes, bytes.length,
- address, SYSLOG_PORT);
+ address, port);
if(this.ds != null && this.address != null)
ds.send(packet);
Modified: logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/net/SyslogAppender.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/net/SyslogAppender.java?rev=438792&r1=438791&r2=438792&view=diff
==============================================================================
--- logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/net/SyslogAppender.java (original)
+++ logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/net/SyslogAppender.java Wed Aug 30 21:48:55 2006
@@ -287,13 +287,15 @@
/**
The <b>SyslogHost</b> option is the name of the the syslog host
- where log output should go.
+ where log 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.
*/
public
- void setSyslogHost(String syslogHost) {
+ void setSyslogHost(final String syslogHost) {
this.sqw = new SyslogQuietWriter(new SyslogWriter(syslogHost),
syslogFacility, errorHandler);
//this.stp = new SyslogTracerPrintWriter(sqw);
Modified: logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java?rev=438792&r1=438791&r2=438792&view=diff
==============================================================================
--- logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java (original)
+++ logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java Wed Aug 30 21:48:55 2006
@@ -339,4 +339,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