You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rm...@apache.org on 2022/06/02 01:33:03 UTC
[logging-log4cxx] 01/01: LOGCXX-556 Update syslog appender to better account for multi-part messages
This is an automated email from the ASF dual-hosted git repository.
rmiddleton pushed a commit to branch LOGCXX-556
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git
commit 5ac5a9c5aece40e434e8ea9ec1102d76a5e9e34e
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Wed Jun 1 21:32:47 2022 -0400
LOGCXX-556 Update syslog appender to better account for multi-part messages
---
src/main/cpp/syslogappender.cpp | 15 +++++++++++----
src/main/include/log4cxx/net/syslogappender.h | 8 ++++++++
src/test/cpp/net/syslogappendertestcase.cpp | 14 +++++++++++++-
3 files changed, 32 insertions(+), 5 deletions(-)
diff --git a/src/main/cpp/syslogappender.cpp b/src/main/cpp/syslogappender.cpp
index 99d91f6c..ff9b6428 100644
--- a/src/main/cpp/syslogappender.cpp
+++ b/src/main/cpp/syslogappender.cpp
@@ -23,6 +23,7 @@
#include <log4cxx/level.h>
#include <log4cxx/helpers/transcoder.h>
#include <log4cxx/helpers/optionconverter.h>
+#include <log4cxx/patternlayout.h>
#if !defined(LOG4CXX)
#define LOG4CXX 1
#endif
@@ -69,7 +70,7 @@ SyslogAppender::SyslogAppender()
: syslogFacility(LOG_USER), facilityPrinting(false), sw(0), maxMessageLength(1024)
{
this->initSyslogFacilityStr();
-
+ this->layout = LayoutPtr(new PatternLayout("%m"));
}
SyslogAppender::SyslogAppender(const LayoutPtr& layout1,
@@ -326,11 +327,17 @@ void SyslogAppender::append(const spi::LoggingEventPtr& event, Pool& p)
while ( start != msg.end() )
{
- LogString::iterator end = start + maxMessageLength - 12;
+ LogString::iterator end;// = start + maxMessageLength - 12;
+
+// if ( end > msg.end() )
+// {
+// end = msg.end();
+// }
- if ( end > msg.end() )
- {
+ if( msg.size() > (maxMessageLength - MINIMUM_MESSAGE_SIZE) ) {
end = msg.end();
+ }else{
+ end = start + maxMessageLength - MINIMUM_MESSAGE_SIZE;
}
LogString newMsg = LogString( start, end );
diff --git a/src/main/include/log4cxx/net/syslogappender.h b/src/main/include/log4cxx/net/syslogappender.h
index 689fd2c1..d09d249a 100644
--- a/src/main/include/log4cxx/net/syslogappender.h
+++ b/src/main/include/log4cxx/net/syslogappender.h
@@ -42,6 +42,9 @@ namespace net
* When the message is too large for the current MaxMessageLength,
* the packet number and total # will be appended to the end of the
* message like this: (5/10)
+ *
+ * Note the maximum message length must be at least 12 to account
+ * for the total number of packets.
*/
class LOG4CXX_EXPORT SyslogAppender : public AppenderSkeleton
{
@@ -150,6 +153,9 @@ class LOG4CXX_EXPORT SyslogAppender : public AppenderSkeleton
inline void setMaxMessageLength(int maxMessageLength1)
{
+ if( maxMessageLength1 < MINIMUM_MESSAGE_SIZE ){
+ maxMessageLength1 = MINIMUM_MESSAGE_SIZE;
+ }
maxMessageLength = maxMessageLength1;
}
@@ -171,6 +177,8 @@ class LOG4CXX_EXPORT SyslogAppender : public AppenderSkeleton
private:
SyslogAppender(const SyslogAppender&);
SyslogAppender& operator=(const SyslogAppender&);
+
+ const int MINIMUM_MESSAGE_SIZE = 12;
}; // class SyslogAppender
LOG4CXX_PTR_DEF(SyslogAppender);
} // namespace net
diff --git a/src/test/cpp/net/syslogappendertestcase.cpp b/src/test/cpp/net/syslogappendertestcase.cpp
index 8470548f..a18462e8 100644
--- a/src/test/cpp/net/syslogappendertestcase.cpp
+++ b/src/test/cpp/net/syslogappendertestcase.cpp
@@ -21,6 +21,7 @@
using namespace log4cxx;
using namespace log4cxx::helpers;
+using namespace log4cxx::net;
/**
Unit tests of log4cxx::SyslogAppender
@@ -33,7 +34,7 @@ class SyslogAppenderTestCase : public AppenderSkeletonTestCase
//
LOGUNIT_TEST(testDefaultThreshold);
LOGUNIT_TEST(testSetOptionThreshold);
-
+ LOGUNIT_TEST(testLargeMessage);
LOGUNIT_TEST_SUITE_END();
@@ -43,6 +44,17 @@ class SyslogAppenderTestCase : public AppenderSkeletonTestCase
{
return new log4cxx::net::SyslogAppender();
}
+
+ void testLargeMessage() {
+ SyslogAppenderPtr syslogAppender =
+ SyslogAppenderPtr(new SyslogAppender());
+
+ syslogAppender->setMaxMessageLength(20);
+
+ Logger::getRootLogger()->addAppender(syslogAppender);
+
+ Logger::getRootLogger()->error( LOG4CXX_STR( "This is a message over 20 characters in length so we can test stuff" ) );
+ }
};
LOGUNIT_TEST_SUITE_REGISTRATION(SyslogAppenderTestCase);