[
https://issues.apache.org/jira/browse/LOG4J2-1047?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14580174#comment-14580174
]
Guillaume Turri commented on LOG4J2-1047:
-----------------------------------------
Here is a rebased patch (btw, is there an easier way to submit patch? Is there
a way to submit merge request for example?)
{code}
>From f8285ef5c956733fffe1e0b1c3bf24fb46b317be Mon Sep 17 00:00:00 2001
From: Guillaume Turri <[email protected]>
Date: Fri, 5 Jun 2015 17:44:15 +0200
Subject: [PATCH] Syslog appender can catch up if we start without connection
Moreover this patch removes duplication:
* minor code duplication between DatagramSocketManager and TcpSocketManager
in the way to handle the error when retrieving the InetAddress
* data duplication in the AbstractSocketManager constructor, because we
had to provide both a InetAddress and a host name, which both match the same
thing
---
.../log4j/core/net/AbstractSocketManager.java | 19 +++++++++++++++----
.../log4j/core/net/DatagramSocketManager.java | 16 +++-------------
.../logging/log4j/core/net/SslSocketManager.java | 20 +++-----------------
.../logging/log4j/core/net/TcpSocketManager.java | 20 +++++---------------
4 files changed, 26 insertions(+), 49 deletions(-)
diff --git
a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/AbstractSocketManager.java
b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/AbstractSocketManager.java
index 4ce9690..0463ff4 100644
---
a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/AbstractSocketManager.java
+++
b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/AbstractSocketManager.java
@@ -19,6 +19,7 @@ package org.apache.logging.log4j.core.net;
import java.io.OutputStream;
import java.io.Serializable;
import java.net.InetAddress;
+import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Map;
@@ -33,7 +34,14 @@ public abstract class AbstractSocketManager extends
OutputStreamManager {
/**
* The Internet address of the host.
*/
- protected final InetAddress inetAddress;
+ private InetAddress inetAddress;
+
+ protected InetAddress getInetAddress() throws UnknownHostException{
+ if ( inetAddress == null ){
+ inetAddress = InetAddress.getByName(host);
+ }
+ return inetAddress;
+ }
/**
* The name of the host.
@@ -49,15 +57,18 @@ public abstract class AbstractSocketManager extends
OutputStreamManager {
* The Constructor.
* @param name The unique name of this connection.
* @param os The OutputStream to manage.
- * @param inetAddress The Internet address.
* @param host The target host name.
* @param port The target port number.
*/
- public AbstractSocketManager(final String name, final OutputStream os,
final InetAddress inetAddress, final String host,
+ public AbstractSocketManager(final String name, final OutputStream os,
final String host,
final int port, final Layout<? extends
Serializable> layout) {
super(os, name, layout);
- this.inetAddress = inetAddress;
this.host = host;
+ try {
+ this.inetAddress = getInetAddress();
+ } catch(UnknownHostException ex) {
+ LOGGER.error("Could not find address of " + this.host, ex);
+ }
this.port = port;
}
diff --git
a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/DatagramSocketManager.java
b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/DatagramSocketManager.java
index 4a49171..c5034c4 100644
---
a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/DatagramSocketManager.java
+++
b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/DatagramSocketManager.java
@@ -18,8 +18,6 @@ package org.apache.logging.log4j.core.net;
import java.io.OutputStream;
import java.io.Serializable;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Map;
@@ -38,14 +36,13 @@ public class DatagramSocketManager extends
AbstractSocketManager {
* The Constructor.
* @param name The unique name of the connection.
* @param os The OutputStream.
- * @param inetAddress
* @param host The host to connect to.
* @param port The port on the host.
* @param layout The layout
*/
- protected DatagramSocketManager(final String name, final OutputStream os,
final InetAddress inetAddress, final String host,
+ protected DatagramSocketManager(final String name, final OutputStream os,
final String host,
final int port, final Layout<? extends Serializable> layout) {
- super(name, os, inetAddress, host, port, layout);
+ super(name, os, host, port, layout);
}
/**
@@ -105,16 +102,9 @@ public class DatagramSocketManager extends
AbstractSocketManager {
@Override
public DatagramSocketManager createManager(final String name, final
FactoryData data) {
- InetAddress inetAddress;
- try {
- inetAddress = InetAddress.getByName(data.host);
- } catch (final UnknownHostException ex) {
- LOGGER.error("Could not find address of " + data.host, ex);
- return null;
- }
final OutputStream os = new DatagramOutputStream(data.host,
data.port, data.layout.getHeader(),
data.layout.getFooter());
- return new DatagramSocketManager(name, os, inetAddress, data.host,
data.port, data.layout);
+ return new DatagramSocketManager(name, os, data.host, data.port,
data.layout);
}
}
}
diff --git
a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SslSocketManager.java
b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SslSocketManager.java
index eeca463..77c279f 100644
---
a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SslSocketManager.java
+++
b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SslSocketManager.java
@@ -57,10 +57,10 @@ public class SslSocketManager extends TcpSocketManager {
* @param layout The Layout.
*/
public SslSocketManager(final String name, final OutputStream os, final
Socket sock,
- final SslConfiguration sslConfig, final InetAddress inetAddress,
final String host, final int port,
+ final SslConfiguration sslConfig, final String host, final int
port,
final int connectTimeoutMillis, final int delay, final boolean
immediateFail,
final Layout<? extends Serializable> layout) {
- super(name, os, sock, inetAddress, host, port, connectTimeoutMillis,
delay, immediateFail, layout);
+ super(name, os, sock, host, port, connectTimeoutMillis, delay,
immediateFail, layout);
this.sslConfig = sslConfig;
}
@@ -133,12 +133,10 @@ public class SslSocketManager extends TcpSocketManager {
@Override
public SslSocketManager createManager(final String name, final
SslFactoryData data) {
- InetAddress inetAddress = null;
OutputStream os = null;
Socket socket = null;
try {
- inetAddress = resolveAddress(data.host);
socket = createSocket(data);
os = socket.getOutputStream();
checkDelay(data.delayMillis, os);
@@ -151,22 +149,10 @@ public class SslSocketManager extends TcpSocketManager {
LOGGER.catching(Level.DEBUG, e);
return null;
}
- return new SslSocketManager(name, os, socket, data.sslConfig,
inetAddress, data.host, data.port, 0,
+ return new SslSocketManager(name, os, socket, data.sslConfig,
data.host, data.port, 0,
data.delayMillis, data.immediateFail, data.layout);
}
- private InetAddress resolveAddress(final String hostName) throws
TlsSocketManagerFactoryException {
- InetAddress address;
-
- try {
- address = InetAddress.getByName(hostName);
- } catch (final UnknownHostException ex) {
- LOGGER.error("Could not find address of {}", hostName, ex);
- throw new TlsSocketManagerFactoryException();
- }
-
- return address;
- }
private void checkDelay(final int delay, final OutputStream os) throws
TlsSocketManagerFactoryException {
if (delay == 0 && os == null) {
diff --git
a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java
b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java
index 60bc17d..06c21e7 100644
---
a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java
+++
b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java
@@ -24,7 +24,6 @@ import java.net.ConnectException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
-import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
@@ -67,7 +66,6 @@ public class TcpSocketManager extends AbstractSocketManager {
* @param name The unique name of this connection.
* @param os The OutputStream.
* @param sock The Socket.
- * @param inetAddress The Internet address of the host.
* @param host The name of the host.
* @param port The port number on the host.
* @param connectTimeoutMillis the connect timeout in milliseconds.
@@ -75,10 +73,10 @@ public class TcpSocketManager extends AbstractSocketManager
{
* @param immediateFail
* @param layout The Layout.
*/
- public TcpSocketManager(final String name, final OutputStream os, final
Socket sock, final InetAddress inetAddress,
+ public TcpSocketManager(final String name, final OutputStream os, final
Socket sock,
final String host, final int port, final int
connectTimeoutMillis, final int delay,
final boolean immediateFail, final Layout<?
extends Serializable> layout) {
- super(name, os, inetAddress, host, port, layout);
+ super(name, os, host, port, layout);
this.connectTimeoutMillis = connectTimeoutMillis;
this.reconnectionDelay = delay;
this.socket = sock;
@@ -205,7 +203,7 @@ public class TcpSocketManager extends AbstractSocketManager
{
while (!shutdown) {
try {
sleep(reconnectionDelay);
- final Socket sock = createSocket(inetAddress, port);
+ final Socket sock = createSocket(getInetAddress(), port);
final OutputStream newOS = sock.getOutputStream();
synchronized (owner) {
try {
@@ -273,20 +271,12 @@ public class TcpSocketManager extends
AbstractSocketManager {
@Override
public TcpSocketManager createManager(final String name, final
FactoryData data) {
- InetAddress inetAddress;
OutputStream os;
try {
- inetAddress = InetAddress.getByName(data.host);
- } catch (final UnknownHostException ex) {
- LOGGER.error("Could not find address of " + data.host, ex);
- return null;
- }
- try {
- // LOG4J2-1042
final Socket socket = new Socket();
socket.connect(new InetSocketAddress(data.host, data.port),
data.connectTimeoutMillis);
os = socket.getOutputStream();
- return new TcpSocketManager(name, os, socket, inetAddress,
data.host, data.port,
+ return new TcpSocketManager(name, os, socket, data.host,
data.port,
data.connectTimeoutMillis, data.delayMillis,
data.immediateFail, data.layout);
} catch (final IOException ex) {
LOGGER.error("TcpSocketManager (" + name + ") " + ex);
@@ -295,7 +285,7 @@ public class TcpSocketManager extends AbstractSocketManager
{
if (data.delayMillis == 0) {
return null;
}
- return new TcpSocketManager(name, os, null, inetAddress,
data.host, data.port, data.connectTimeoutMillis,
+ return new TcpSocketManager(name, os, null, data.host, data.port,
data.connectTimeoutMillis,
data.delayMillis, data.immediateFail, data.layout);
}
}
--
1.9.1
{code}
When I run the sequence you describe:
# run the program => The first messages reach the syslog
# disconnect from the network => The syslog stops receiving messages
# wait for more logging to take place => The new messages are currently only
logged on the console
# reconnect to the network => The syslog receives the messages it missed (I
guess it may end up losing some messages if it has been deconnected for too
long)
# wait for more logging to take place => The syslog receives each new messages
As far as I understand, this patch doesn't impact this case.
Actually, the only thing this patch changes, is that we try to convert the host
name into an InetAddress, as long as we didn't succeed. Once we get the
InetAddress, the behavior is exactly the same as before. (The rest of the patch
is just plumbing).
So, in the scenario you describe, since we launch the program with the network
on, then the InetAddress is derived since the beginning, so the behavior isn't
changed
> When SyslogAppender can't find inetAddress at startup, it will never try to
> reconnect
> -------------------------------------------------------------------------------------
>
> Key: LOG4J2-1047
> URL: https://issues.apache.org/jira/browse/LOG4J2-1047
> Project: Log4j 2
> Issue Type: Bug
> Components: Core
> Affects Versions: 2.3
> Environment: > lsb_release -a
> No LSB modules are available.
> Distributor ID: Ubuntu
> Description: Ubuntu 14.04.2 LTS
> Release: 14.04
> Codename: trusty
> > java -version
> java version "1.7.0_79"
> OpenJDK Runtime Environment (IcedTea 2.5.5) (7u79-2.5.5-0ubuntu0.14.04.2)
> OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)
> Reporter: Guillaume Turri
> Priority: Minor
>
> * Steps to reproduce:
> ** Deactivate your wifi and unplug your network cable.
> ** Launch the following code with the following config
> ** Reactivate the network while the code is still running
> The code is:
> {code}
> import org.apache.logging.log4j.LogManager;
> import org.apache.logging.log4j.Logger
> public class App
> {
> private static final Logger _logger =
> LogManager.getLogger("TestLogger");
> public static void main( String[] args ) throws Exception
> {
> int id = 0;
> while ( true ){
> String msg = "message: " + id;
> _logger.error(msg);
> id++;
> Thread.sleep(1000);
> }
> }
> }
> {code}
> the config is:
> {code}
> <?xml version="1.0" encoding="UTF-8"?>
>
>
>
> <Configuration status="WARN">
> <Appenders>
> <Console name="Console" target="SYSTEM_OUT">
> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} -
> %msg%n"/>
> </Console>
> <Syslog name="my-syslog" host="my-host" port="12201" protocol="TCP"
> format="RFC5424" mdcId="mdc" includeMDC="true" appName="testGTApp"
> newLine="true" connectTimeoutMillis="100" immediateFail="true"
> reconnectionDelayMillis="3000" immediateFlush="true" />
> </Appenders>
> <Loggers>
> <Root level="info">
> <AppenderRef ref="Console" />
> <AppenderRef ref="my-syslog"/>
> </Root>
> </Loggers>
> </Configuration>
> {code}
> where "my-host" is a host with an actual syslog listening on the given port
> and with the given protocol.
> "my-host" should be the name of the host. ie: it should *not* be an IP. It
> should *not* be localhost either.
> * Expected behavior: after we retrieve the network, messages are logged in
> the syslog
> * Actual behavior: it starts by logging on the console the following error,
> and then, it never connects to the syslog
> {code}
> 2015-06-09 16:31:26,939 ERROR Could not find address ofmy-host
> java.net.UnknownHostException: my-host: Name or service not known
> at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
> at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:901)
> at
> java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1293)
> at java.net.InetAddress.getAllByName0(InetAddress.java:1246)
> at java.net.InetAddress.getAllByName(InetAddress.java:1162)
> at java.net.InetAddress.getAllByName(InetAddress.java:1098)
> at java.net.InetAddress.getByName(InetAddress.java:1048)
> at
> org.apache.logging.log4j.core.net.TcpSocketManager$TcpSocketManagerFactory.createManager(TcpSocketManager.java:279)
> at
> org.apache.logging.log4j.core.net.TcpSocketManager$TcpSocketManagerFactory.createManager(TcpSocketManager.java:272)
> at
> org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:71)
> at
> org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:60)
> at
> org.apache.logging.log4j.core.net.TcpSocketManager.getSocketManager(TcpSocketManager.java:114)
> at
> org.apache.logging.log4j.core.appender.SocketAppender.createSocketManager(SocketAppender.java:173)
> at
> org.apache.logging.log4j.core.appender.SyslogAppender.createAppender(SyslogAppender.java:145)
> [... truncated ...]
> 2015-06-09 16:31:26,942 ERROR Unable to invoke factory method in class class
> org.apache.logging.log4j.core.appender.SyslogAppender for element Syslog.
> java.lang.reflect.InvocationTargetException
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:606)
> at
> org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:137)
> [... truncated. ...]
> 2015-06-09 16:31:26,944 ERROR Null object returned for Syslog in Appenders.
> 2015-06-09 16:31:26,947 ERROR Unable to locate appender my-syslog for logger
> {code}
> * Potential fix:
> The following patch fixes the issue. (it changes a few public signatures, so
> you may not want to apply it as-is).
> {code}
> From 0d2818762cf768e80f46fd08f48abac37747825b Mon Sep 17 00:00:00 2001
> From: Guillaume Turri <[email protected]>
> Date: Fri, 5 Jun 2015 17:44:15 +0200
> Subject: [PATCH] Syslog appender can catch up if we start without connection
> Moreover this patch removes duplication:
> * minor code duplication between DatagramSocketManager and TcpSocketManager
> in the way to handle the error when retrieving the InetAddress
> * data duplication in the AbstractSocketManager constructor, because we
> had to provide both a InetAddress and a host name, which both match the same
> thing
> ---
> .../logging/log4j/core/net/AbstractSocketManager.java | 19
> +++++++++++++++----
> .../logging/log4j/core/net/DatagramSocketManager.java | 16 +++-------------
> .../logging/log4j/core/net/SslSocketManager.java | 4 ++--
> .../logging/log4j/core/net/TcpSocketManager.java | 19
> +++++--------------
> 4 files changed, 25 insertions(+), 33 deletions(-)
> diff --git
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/AbstractSocketManager.java
>
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/AbstractSocketManager.java
> index 5ff43a3..4b0923c 100644
> ---
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/AbstractSocketManager.java
> +++
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/AbstractSocketManager.java
> @@ -19,6 +19,7 @@ package org.apache.logging.log4j.core.net;
> import java.io.OutputStream;
> import java.io.Serializable;
> import java.net.InetAddress;
> +import java.net.UnknownHostException;
> import java.util.HashMap;
> import java.util.Map;
>
> @@ -33,7 +34,14 @@ public abstract class AbstractSocketManager extends
> OutputStreamManager {
> /**
> * The Internet address of the host.
> */
> - protected final InetAddress inetAddress;
> + private InetAddress inetAddress;
> +
> + protected InetAddress getInetAddress() throws UnknownHostException{
> + if ( inetAddress == null ){
> + inetAddress = InetAddress.getByName(host);
> + }
> + return inetAddress;
> + }
>
> /**
> * The name of the host.
> @@ -49,15 +57,18 @@ public abstract class AbstractSocketManager extends
> OutputStreamManager {
> * The Constructor.
> * @param name The unique name of this connection.
> * @param os The OutputStream to manage.
> - * @param inetAddress The Internet address.
> * @param host The target host name.
> * @param port The target port number.
> */
> - public AbstractSocketManager(final String name, final OutputStream os,
> final InetAddress inetAddress, final String host,
> + public AbstractSocketManager(final String name, final OutputStream os,
> final String host,
> final int port, final Layout<? extends
> Serializable> layout) {
> super(os, name, layout);
> - this.inetAddress = inetAddress;
> this.host = host;
> + try {
> + this.inetAddress = getInetAddress();
> + } catch(UnknownHostException ex) {
> + LOGGER.error("Could not find address of " + this.host, ex);
> + }
> this.port = port;
> }
>
> diff --git
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/DatagramSocketManager.java
>
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/DatagramSocketManager.java
> index e16c6ef..5b0ab8f 100644
> ---
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/DatagramSocketManager.java
> +++
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/DatagramSocketManager.java
> @@ -18,8 +18,6 @@ package org.apache.logging.log4j.core.net;
>
> import java.io.OutputStream;
> import java.io.Serializable;
> -import java.net.InetAddress;
> -import java.net.UnknownHostException;
> import java.util.HashMap;
> import java.util.Map;
>
> @@ -38,14 +36,13 @@ public class DatagramSocketManager extends
> AbstractSocketManager {
> * The Constructor.
> * @param name The unique name of the connection.
> * @param os The OutputStream.
> - * @param inetAddress
> * @param host The host to connect to.
> * @param port The port on the host.
> * @param layout The layout
> */
> - protected DatagramSocketManager(final String name, final OutputStream
> os, final InetAddress inetAddress, final String host,
> + protected DatagramSocketManager(final String name, final OutputStream
> os, final String host,
> final int port, final Layout<? extends Serializable> layout)
> {
> - super(name, os, inetAddress, host, port, layout);
> + super(name, os, host, port, layout);
> }
>
> /**
> @@ -105,16 +102,9 @@ public class DatagramSocketManager extends
> AbstractSocketManager {
>
> @Override
> public DatagramSocketManager createManager(final String name, final
> FactoryData data) {
> - InetAddress inetAddress;
> - try {
> - inetAddress = InetAddress.getByName(data.host);
> - } catch (final UnknownHostException ex) {
> - LOGGER.error("Could not find address of " + data.host, ex);
> - return null;
> - }
> final OutputStream os = new DatagramOutputStream(data.host,
> data.port, data.layout.getHeader(),
> data.layout.getFooter());
> - return new DatagramSocketManager(name, os, inetAddress,
> data.host, data.port, data.layout);
> + return new DatagramSocketManager(name, os, data.host, data.port,
> data.layout);
> }
> }
> }
> diff --git
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SslSocketManager.java
>
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SslSocketManager.java
> index 87e7867..cc43490 100644
> ---
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SslSocketManager.java
> +++
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SslSocketManager.java
> @@ -57,10 +57,10 @@ public class SslSocketManager extends TcpSocketManager {
> * @param layout The Layout.
> */
> public SslSocketManager(final String name, final OutputStream os, final
> Socket sock,
> - final SslConfiguration sslConfig, final InetAddress inetAddress,
> final String host, final int port,
> + final SslConfiguration sslConfig, final String host, final int
> port,
> int connectTimeoutMillis, final int delay, final boolean
> immediateFail,
> final Layout<? extends Serializable> layout) {
> - super(name, os, sock, inetAddress, host, port, connectTimeoutMillis,
> delay, immediateFail, layout);
> + super(name, os, sock, host, port, connectTimeoutMillis, delay,
> immediateFail, layout);
> this.sslConfig = sslConfig;
> }
>
> diff --git
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java
>
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java
> index 9ab9f5f..20796bb 100644
> ---
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java
> +++
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java
> @@ -24,7 +24,6 @@ import java.net.ConnectException;
> import java.net.InetAddress;
> import java.net.InetSocketAddress;
> import java.net.Socket;
> -import java.net.UnknownHostException;
> import java.util.HashMap;
> import java.util.Map;
> import java.util.concurrent.CountDownLatch;
> @@ -67,7 +66,6 @@ public class TcpSocketManager extends AbstractSocketManager
> {
> * @param name The unique name of this connection.
> * @param os The OutputStream.
> * @param sock The Socket.
> - * @param inetAddress The Internet address of the host.
> * @param host The name of the host.
> * @param port The port number on the host.
> * @param connectTimeoutMillis the connect timeout in milliseconds.
> @@ -75,10 +73,10 @@ public class TcpSocketManager extends
> AbstractSocketManager {
> * @param immediateFail
> * @param layout The Layout.
> */
> - public TcpSocketManager(final String name, final OutputStream os, final
> Socket sock, final InetAddress inetAddress,
> + public TcpSocketManager(final String name, final OutputStream os, final
> Socket sock,
> final String host, final int port, int
> connectTimeoutMillis, final int delay,
> final boolean immediateFail, final Layout<?
> extends Serializable> layout) {
> - super(name, os, inetAddress, host, port, layout);
> + super(name, os, host, port, layout);
> this.connectTimeoutMillis = connectTimeoutMillis;
> this.reconnectionDelay = delay;
> this.socket = sock;
> @@ -205,7 +203,7 @@ public class TcpSocketManager extends
> AbstractSocketManager {
> while (!shutdown) {
> try {
> sleep(reconnectionDelay);
> - final Socket sock = createSocket(inetAddress, port);
> + final Socket sock = createSocket(getInetAddress(), port);
> final OutputStream newOS = sock.getOutputStream();
> synchronized (owner) {
> try {
> @@ -273,18 +271,11 @@ public class TcpSocketManager extends
> AbstractSocketManager {
> @Override
> public TcpSocketManager createManager(final String name, final
> FactoryData data) {
>
> - InetAddress inetAddress;
> OutputStream os;
> try {
> - inetAddress = InetAddress.getByName(data.host);
> - } catch (final UnknownHostException ex) {
> - LOGGER.error("Could not find address of " + data.host, ex);
> - return null;
> - }
> - try {
> final Socket socket = new Socket(data.host, data.port);
> os = socket.getOutputStream();
> - return new TcpSocketManager(name, os, socket, inetAddress,
> data.host, data.port,
> + return new TcpSocketManager(name, os, socket, data.host,
> data.port,
> data.connectTimeoutMillis, data.delayMillis,
> data.immediateFail, data.layout);
> } catch (final IOException ex) {
> LOGGER.error("TcpSocketManager (" + name + ") " + ex);
> @@ -293,7 +284,7 @@ public class TcpSocketManager extends
> AbstractSocketManager {
> if (data.delayMillis == 0) {
> return null;
> }
> - return new TcpSocketManager(name, os, null, inetAddress,
> data.host, data.port, data.connectTimeoutMillis,
> + return new TcpSocketManager(name, os, null, data.host,
> data.port, data.connectTimeoutMillis,
> data.delayMillis, data.immediateFail, data.layout);
> }
> }
> --
> 1.9.1
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]