[
https://issues.apache.org/jira/browse/LOG4J2-2679?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16913248#comment-16913248
]
Ralph Goers commented on LOG4J2-2679:
-------------------------------------
With regard to problem 1, I looked into that a few months ago. It cannot be
fixed. Log4j fails as soon as it is notified. Unfortunately, TCP is designed so
that it only notices the failure after one or two “successful” calls have been
made. The only way around this is to use a protocol that acks every message
sent.
> 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
> Priority: Major
>
> 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
> Syslog LogEvents to remore syslog server
> +*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 your SyslogAppender implementation: Line 135
> final AbstractSocketManager manager = createSocketManager(name, protocol,
> getHost(), getPort(), getConnectTimeoutMillis(),
> sslConfiguration, getReconnectDelayMillis(),
> getImmediateFail(), layout, Constants.ENCODER_BYTE_BUFFER_SIZE,
> {color:red}*null*{color});
> 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)