You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "Tamir Noach (Jira)" <ji...@apache.org> on 2019/08/22 08:30:00 UTC

[jira] [Created] (LOG4J2-2679) SocketAppender/Syslog Appender with TCP protocol does not throw exception immediatly when server is not reachable

Tamir Noach created LOG4J2-2679:
-----------------------------------

             Summary: SocketAppender/Syslog Appender with TCP protocol does not throw exception immediatly when server is not reachable
                 Key: LOG4J2-2679
                 URL: https://issues.apache.org/jira/browse/LOG4J2-2679
             Project: Log4j 2
          Issue Type: Bug
    Affects Versions: 2.12.0
         Environment: The code is running on apache-tomcat 8.5 on Linux


NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

 
            Reporter: Tamir Noach


Hi,

We're using Log4j 2.12.0 org.apache.logging.log4j:log4j-core:2.12.0.
We creating in code SyslogAppender with *TCP *protocol in order to send SyslogEvents.

+*Problem 1*+
 if the syslog server is down or not reachable we are NOT getting immediate exception when trying following code. 

try {
            StructuredDataMessage message = new StructuredDataMessage("", logMsg, type, params);
            LogEvent logEvent = Log4jLogEvent.newBuilder()
                .setMessage(message)
                .setLevel(level)               
                .build();
            appender.append(logEvent);

            //LogEvent was sent and we need to check if we need to close the alarm
            if(alarmOpen){
                closeSyslogConnectionAlarm();
            }
        }catch (Exception exc){
            //Exception is thrown only if we work with TCP/TLS and set SocketOptions
            log4jLogger.error("failed to send to syslog",exc);
            if (!alarmOpen){
                openSyslogConnectionAlarm();
            }
        }

+This is how we create the SyslogAppender +

private SyslogAppender createAppender(URI uri, SslConfiguration sslConfiguration, Protocol protocol, String name, Layout<? extends Serializable> layout) {
 *{color:red}SocketOptions socketOptions = new SocketOptions().setSoTimeout(5000);{color}*
 SyslogAppender appender = SyslogAppender.newSyslogAppenderBuilder()
 .setName(name)
 .setAppName(APP_NAME)
 .setIgnoreExceptions(true)
 .withHost(uri.getHost())
 .withPort(uri.getPort())
 .withConnectTimeoutMillis(5000)
 {color:red}.withSocketOptions(socketOptions){color}
 .withSslConfiguration(sslConfiguration)
 .setFormat(FORMAT_RFC_5424)
 .withProtocol(protocol)
 .withImmediateFlush(true)
 .withImmediateFail(false)
 .withReconnectDelayMillis(1000)
 .setLayout(layout)
 .build();
 appender.start();
 return appender;
 }

*+Problem 2+*
After we created the SyslogAppender the appender SocketOptions is null !
please advise if we're not creating the SyslogAppender/SocketAppender correctly.

Following code is copied from SyslogAppender impl'
final AbstractSocketManager manager = createSocketManager(name, protocol, getHost(), getPort(), getConnectTimeoutMillis(),
                    sslConfiguration, getReconnectDelayMillis(), getImmediateFail(), layout, Constants.ENCODER_BYTE_BUFFER_SIZE, null);
The last parameter is null while it should be SocketOptions..
Is this intended or a bug ??

Will appreciate your quick response.

Regards, Tamir



--
This message was sent by Atlassian Jira
(v8.3.2#803003)