You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by sw...@apache.org on 2024/05/07 23:40:39 UTC

(logging-log4cxx) 01/01: Prevent abnormal termination when telnet appender has no layout

This is an automated email from the ASF dual-hosted git repository.

swebb2066 pushed a commit to branch telnet_appender
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git

commit b3aba3904bd943241e5676af7092d8e956804800
Author: Stephen Webb <sw...@gmail.com>
AuthorDate: Wed May 8 09:40:19 2024 +1000

    Prevent abnormal termination when telnet appender has no layout
---
 src/main/cpp/telnetappender.cpp               | 19 ++++++++++++++++++-
 src/main/include/log4cxx/net/telnetappender.h | 15 +++++++++++++++
 2 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/src/main/cpp/telnetappender.cpp b/src/main/cpp/telnetappender.cpp
index 349ad672..cdb4ff51 100644
--- a/src/main/cpp/telnetappender.cpp
+++ b/src/main/cpp/telnetappender.cpp
@@ -117,6 +117,10 @@ void TelnetAppender::setOption(const LogString& option,
 	{
 		setPort(OptionConverter::toInt(value, DEFAULT_PORT));
 	}
+	else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("MAXCONNECTIONS"), LOG4CXX_STR("maxconnections")))
+	{
+		setMaxConnections(OptionConverter::toInt(value, MAX_CONNECTIONS));
+	}
 	else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("ENCODING"), LOG4CXX_STR("encoding")))
 	{
 		setEncoding(value);
@@ -203,7 +207,10 @@ void TelnetAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 	if (count > 0)
 	{
 		LogString msg;
-		_priv->layout->format(msg, event, _priv->pool);
+		if (_priv->layout)
+			_priv->layout->format(msg, event, p);
+		else
+			msg = event->getMessage();
 		msg.append(LOG4CXX_STR("\r\n"));
 		size_t bytesSize = msg.size() * 2;
 		char* bytes = p.pstralloc(bytesSize);
@@ -318,3 +325,13 @@ void TelnetAppender::setPort(int port1)
 {
 	_priv->port = port1;
 }
+
+int TelnetAppender::getMaxConnections() const
+{
+	return static_cast<int>(_priv->connections.size());
+}
+
+void TelnetAppender::setMaxConnections(int newValue)
+{
+	_priv->connections.resize(newValue);
+}
diff --git a/src/main/include/log4cxx/net/telnetappender.h b/src/main/include/log4cxx/net/telnetappender.h
index 1c18b532..7232277e 100644
--- a/src/main/include/log4cxx/net/telnetappender.h
+++ b/src/main/include/log4cxx/net/telnetappender.h
@@ -115,6 +115,7 @@ class LOG4CXX_EXPORT TelnetAppender : public AppenderSkeleton
 		Supported options | Supported values | Default value
 		-------------- | ---------------- | ---------------
 		Port | {int} | 23
+		MaxConnections | {int} | 20
 		Encoding | C,UTF-8,UTF-16,UTF-16BE,UTF-16LE,646,US-ASCII,ISO646-US,ANSI_X3.4-1968,ISO-8859-1,ISO-LATIN-1 | UTF-8
 
 		\sa AppenderSkeleton::setOption()
@@ -132,6 +133,20 @@ class LOG4CXX_EXPORT TelnetAppender : public AppenderSkeleton
 		*/
 		void setPort(int port1);
 
+		/**
+		The number of allowed concurrent conections.
+
+		\sa setOption
+		 */
+		int getMaxConnections() const;
+
+		/**
+		Set the number of allowed concurrent conections to \c newValue.
+
+		\sa setOption
+		 */
+		void setMaxConnections(int newValue);
+
 
 		/** shuts down the appender. */
 		void close() override;