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 2023/04/15 04:40:54 UTC
[logging-log4cxx] branch master updated: Fix SMTP appender (#199)
This is an automated email from the ASF dual-hosted git repository.
swebb2066 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git
The following commit(s) were added to refs/heads/master by this push:
new cc2c49ef Fix SMTP appender (#199)
cc2c49ef is described below
commit cc2c49ef3573e97fea0fc6c0ceba6c44f270ff87
Author: Stephen Webb <st...@ieee.org>
AuthorDate: Sat Apr 15 14:40:49 2023 +1000
Fix SMTP appender (#199)
* HAS_LIBESMTP needs to globally available
* Improve the configuration information for the SMTP appender
* Add SMTP appender to CI tests
* Update smtp appender test case to current log4cxx
* Prevent segfault in smtpappendertestcase
* Fix failing smtpappendertestcase
* Add a disabled SMTP appender test that uses a valid configuration
---
.github/workflows/log4cxx-cpp11.yml | 4 +-
.github/workflows/log4cxx-posix.yml | 10 +---
CMakeLists.txt | 17 ++++++-
src/CMakeLists.txt | 4 ++
src/cmake/FindESMTP.cmake | 72 +++++++++++++++++++++++++++
src/main/cpp/domconfigurator.cpp | 4 +-
src/main/cpp/smtpappender.cpp | 33 ++++++------
src/main/include/CMakeLists.txt | 10 ----
src/main/include/log4cxx/net/smtpappender.h | 64 +++++++++++++++++++++---
src/main/include/log4cxx/private/string_c11.h | 2 +-
src/test/cpp/CMakeLists.txt | 3 ++
src/test/cpp/net/CMakeLists.txt | 4 +-
src/test/cpp/net/smtpappendertestcase.cpp | 45 +++++++++--------
13 files changed, 200 insertions(+), 72 deletions(-)
diff --git a/.github/workflows/log4cxx-cpp11.yml b/.github/workflows/log4cxx-cpp11.yml
index 803c9b93..23f97219 100644
--- a/.github/workflows/log4cxx-cpp11.yml
+++ b/.github/workflows/log4cxx-cpp11.yml
@@ -29,14 +29,14 @@ jobs:
- name: 'Configure Dependencies - Ubuntu'
run: |
sudo apt-get update
- sudo apt-get install -y libapr1-dev libaprutil1-dev libboost-filesystem-dev libboost-thread-dev
+ sudo apt-get install -y libapr1-dev libaprutil1-dev libboost-filesystem-dev libboost-thread-dev libesmtp-dev
- name: 'run cmake - *nix'
run: |
cd main
mkdir build
cd build
- cmake -DCMAKE_CXX_STANDARD=11 ..
+ cmake -DCMAKE_CXX_STANDARD=11 -DLOG4CXX_ENABLE_ESMTP=ON ..
cmake --build .
- name: run unit tests
diff --git a/.github/workflows/log4cxx-posix.yml b/.github/workflows/log4cxx-posix.yml
index 7f3b98e2..fd78b451 100644
--- a/.github/workflows/log4cxx-posix.yml
+++ b/.github/workflows/log4cxx-posix.yml
@@ -24,16 +24,8 @@ jobs:
strategy:
fail-fast: false
matrix:
- name: [ubuntu18-gcc, ubuntu18-clang, ubuntu20-gcc, ubuntu20-clang, ubuntu22-gcc, ubuntu22-clang, osx-11, osx-12]
+ name: [ubuntu20-gcc, ubuntu20-clang, ubuntu22-gcc, ubuntu22-clang, osx-11, osx-12]
include:
- - name: ubuntu18-gcc
- os: ubuntu-18.04
- cxx: g++
- cc: gcc
- - name: ubuntu18-clang
- os: ubuntu-18.04
- cxx: clang++
- cc: clang
- name: ubuntu20-gcc
os: ubuntu-20.04
cxx: g++
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ba969a67..52e7deed 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -67,6 +67,21 @@ elseif(TARGET expat::expat)
set(EXPAT_LIBRARIES expat::expat)
endif()
+option(LOG4CXX_ENABLE_ESMTP "Support logging via libesmtp" OFF)
+option(LIBESMTP_STATIC "Link to the libesmtp static library" OFF)
+if(LOG4CXX_ENABLE_ESMTP)
+ find_package(ESMTP)
+ if(ESMTP_FOUND)
+ set(HAS_LIBESMTP 1)
+ else()
+ set(HAS_LIBESMTP 0)
+ message(SEND_ERROR "libesmtp not found but SMTP support requested")
+ endif(ESMTP_FOUND)
+ else()
+ set(ESMTP_LIBRARIES )
+ set(HAS_LIBESMTP 0)
+endif(LOG4CXX_ENABLE_ESMTP)
+
find_package(fmt 7.1 QUIET)
if(${fmt_FOUND})
option(ENABLE_FMT_LAYOUT "Enable the FMT layout(if libfmt found)" ON)
@@ -269,8 +284,6 @@ message(STATUS " log4cxx cfstring API ............ : ${LOG4CXX_CFSTRING}")
endif()
message(STATUS " logchar type .................... : ${LOG4CXX_CHAR}")
message(STATUS " charset ......................... : ${LOG4CXX_CHARSET}")
-message(STATUS " Using libESMTP .................. : ${HAS_LIBESMTP}")
-message(STATUS " ODBC library .................... : ${HAS_ODBC}")
message(STATUS " syslog .......................... : ${HAS_SYSLOG}")
message(STATUS " Networking support .............. : ${LOG4CXX_NETWORKING_SUPPORT}")
message(STATUS " Qt support ...................... : ${LOG4CXX_QT_SUPPORT}")
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 788320de..cfac9457 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -22,6 +22,10 @@ add_subdirectory(main)
target_compile_definitions(log4cxx PRIVATE ${LOG4CXX_COMPILE_DEFINITIONS} ${APR_COMPILE_DEFINITIONS} ${APR_UTIL_COMPILE_DEFINITIONS} )
target_include_directories(log4cxx INTERFACE $<INSTALL_INTERFACE:include> PRIVATE ${APR_INCLUDE_DIR} ${APR_UTIL_INCLUDE_DIR})
target_link_libraries(log4cxx PRIVATE ${APR_UTIL_LIBRARIES} ${EXPAT_LIBRARIES} ${APR_LIBRARIES} ${APR_SYSTEM_LIBS})
+if(HAS_LIBESMTP)
+ target_include_directories(log4cxx PRIVATE ${ESMTP_INCLUDE_DIR})
+ target_link_libraries(log4cxx PRIVATE ${ESMTP_LIBRARIES})
+endif()
if(WIN32)
# The ODBC appender is always enabled in the Windows configuration
target_link_libraries(log4cxx PRIVATE odbc32.lib)
diff --git a/src/cmake/FindESMTP.cmake b/src/cmake/FindESMTP.cmake
new file mode 100644
index 00000000..8919a036
--- /dev/null
+++ b/src/cmake/FindESMTP.cmake
@@ -0,0 +1,72 @@
+# Locate libesmtp include paths and libraries
+include(FindPackageHandleStandardArgs)
+
+# This module defines
+# ESMTP_INCLUDE_DIR, where to find libesmtp.h, etc.
+# ESMTP_LIBRARIES, the libraries to link against to use libesmtp.
+# ESMTP_FOUND, set to 'yes' if found
+macro(_esmtp_invoke _varname)
+ execute_process(
+ COMMAND ${_esmtp_CONFIG_EXECUTABLE} ${ARGN}
+ OUTPUT_VARIABLE _esmtp_output
+ RESULT_VARIABLE _esmtp_failed
+ )
+
+ if(_esmtp_failed)
+ message(FATAL_ERROR "${_esmtp_CONFIG_EXECUTABLE} ${ARGN} failed with result ${_esmtp_failed}")
+ else()
+ string(REGEX REPLACE "[\r\n]" "" _esmtp_output "${_esmtp_output}")
+ string(REGEX REPLACE " +$" "" _esmtp_output "${_esmtp_output}")
+ string(REGEX REPLACE "^ +" "" _esmtp_output "${_esmtp_output}")
+
+ separate_arguments(_esmtp_output)
+ set(${_varname} "${_esmtp_output}")
+ endif(_esmtp_failed)
+endmacro(_esmtp_invoke)
+
+if(NOT LIBESMTP_STATIC) # libesmtp-config does not support --static used in FindPkgConfig.cmake
+find_package(PkgConfig)
+pkg_check_modules(esmtp esmtp)
+#message("esmtp_FOUND=${esmtp_FOUND}")
+endif()
+
+if(esmtp_FOUND)
+ find_path(ESMTP_INCLUDE_DIR
+ NAMES libesmtp.h
+ HINTS ${ESMTP_INCLUDE_DIRS}
+ PATH_SUFFIXES esmtp)
+ if (LIBESMTP_STATIC OR NOT BUILD_SHARED_LIBS)
+ set(ESMTP_LIBRARIES ${LIBESMTP_STATIC_LINK_LIBRARIES})
+ else()
+ set(ESMTP_LIBRARIES ${ESMTP_LINK_LIBRARIES})
+ endif()
+else()
+ find_program(_esmtp_CONFIG_EXECUTABLE
+ libesmtp-config
+ PATHS /usr/local/opt/libesmtp/bin $ENV{ProgramFiles}/esmtp/bin
+ )
+ mark_as_advanced(_esmtp_CONFIG_EXECUTABLE)
+ if(EXISTS ${_esmtp_CONFIG_EXECUTABLE})
+ _esmtp_invoke(_esmtp_cflags_args --cflags)
+ #message("_esmtp_cflags_args=${_esmtp_cflags_args}")
+ string(REGEX MATCH "-I([^ ;]+)" _esmtp_include_flag "${_esmtp_cflags_args}")
+ set(ESMTP_INCLUDE_DIR "${CMAKE_MATCH_1}")
+ if (LIBESMTP_STATIC OR NOT BUILD_SHARED_LIBS)
+ find_library(ESMTP_LIBRARIES NAMES libesmtp.a)
+ else()
+ _esmtp_invoke(ESMTP_LIBRARIES --libs)
+ endif()
+ else()
+ find_path(ESMTP_INCLUDE_DIR libesmtp.h PATH_SUFFIXES esmtp)
+ if (LIBESMTP_STATIC OR NOT BUILD_SHARED_LIBS)
+ find_library(ESMTP_LIBRARIES NAMES libesmtp.a)
+ else()
+ find_library(ESMTP_LIBRARIES NAMES esmtp)
+ endif()
+ endif()
+endif()
+
+#message("ESMTP_INCLUDE_DIR=${ESMTP_INCLUDE_DIR}")
+#message("ESMTP_LIBRARIES=${ESMTP_LIBRARIES}")
+find_package_handle_standard_args(ESMTP
+ ESMTP_INCLUDE_DIR ESMTP_LIBRARIES)
diff --git a/src/main/cpp/domconfigurator.cpp b/src/main/cpp/domconfigurator.cpp
index 29f7aea4..861b98f4 100644
--- a/src/main/cpp/domconfigurator.cpp
+++ b/src/main/cpp/domconfigurator.cpp
@@ -279,11 +279,11 @@ AppenderPtr DOMConfigurator::parseAppender(Pool& p,
}
else
{
- log4cxx::net::SMTPAppenderPtr smtpa = log4cxx::cast<log4cxx::net::SMTPAppender>(appender);
+ auto smtpa = log4cxx::cast<log4cxx::net::SMTPAppender>(appender);
if (smtpa != NULL)
{
- log4cxx::spi::TriggeringEventEvaluatorPtr evaluator = log4cxx::cast<TriggeringEventEvaluator>(policyPtr);
+ auto evaluator = log4cxx::cast<TriggeringEventEvaluator>(policy);
smtpa->setEvaluator(evaluator);
}
}
diff --git a/src/main/cpp/smtpappender.cpp b/src/main/cpp/smtpappender.cpp
index b295c1cf..47f4bfe8 100644
--- a/src/main/cpp/smtpappender.cpp
+++ b/src/main/cpp/smtpappender.cpp
@@ -19,6 +19,7 @@
#include <log4cxx/helpers/loglog.h>
#include <log4cxx/helpers/optionconverter.h>
#include <log4cxx/spi/loggingevent.h>
+#include <log4cxx/private/string_c11.h>
#include <log4cxx/helpers/stringhelper.h>
#include <log4cxx/helpers/stringtokenizer.h>
#include <log4cxx/helpers/transcoder.h>
@@ -192,7 +193,7 @@ class SMTPMessage
const LogString msg, Pool& p)
{
message = smtp_add_message(session);
- current_len = str.length();
+ current_len = msg.length();
body = current = toMessage(msg, p);
messagecbState = 0;
smtp_set_reverse_path(message, toAscii(from, p));
@@ -676,23 +677,23 @@ bool SMTPAppender::checkEntryConditions()
{
#if LOG4CXX_HAVE_LIBESMTP
- if ((to.empty() && cc.empty() && bcc.empty()) || from.empty() || smtpHost.empty())
+ if ((_priv->to.empty() && _priv->cc.empty() && _priv->bcc.empty()) || _priv->from.empty() || _priv->smtpHost.empty())
{
- errorHandler->error(LOG4CXX_STR("Message not configured."));
+ _priv->errorHandler->error(LOG4CXX_STR("Message not configured."));
return false;
}
- if (evaluator == 0)
+ if (_priv->evaluator == 0)
{
- errorHandler->error(LOG4CXX_STR("No TriggeringEventEvaluator is set for appender [") +
- name + LOG4CXX_STR("]."));
+ _priv->errorHandler->error(LOG4CXX_STR("No TriggeringEventEvaluator is set for appender [") +
+ _priv->name + LOG4CXX_STR("]."));
return false;
}
- if (layout == 0)
+ if (_priv->layout == 0)
{
- errorHandler->error(LOG4CXX_STR("No layout set for appender named [") + name + LOG4CXX_STR("]."));
+ _priv->errorHandler->error(LOG4CXX_STR("No layout set for appender named [") + _priv->name + LOG4CXX_STR("]."));
return false;
}
@@ -751,22 +752,22 @@ void SMTPAppender::sendBuffer(Pool& p)
try
{
LogString sbuf;
- layout->appendHeader(sbuf, p);
+ _priv->layout->appendHeader(sbuf, p);
- int len = cb.length();
+ int len = _priv->cb.length();
for (int i = 0; i < len; i++)
{
- LoggingEventPtr event = cb.get();
- layout->format(sbuf, event, p);
+ LoggingEventPtr event = _priv->cb.get();
+ _priv->layout->format(sbuf, event, p);
}
- layout->appendFooter(sbuf, p);
+ _priv->layout->appendFooter(sbuf, p);
- SMTPSession session(smtpHost, smtpPort, smtpUsername, smtpPassword, p);
+ SMTPSession session(_priv->smtpHost, _priv->smtpPort, _priv->smtpUsername, _priv->smtpPassword, p);
- SMTPMessage message(session, from, to, cc,
- bcc, subject, sbuf, p);
+ SMTPMessage message(session, _priv->from, _priv->to, _priv->cc,
+ _priv->bcc, _priv->subject, sbuf, p);
session.send(p);
diff --git a/src/main/include/CMakeLists.txt b/src/main/include/CMakeLists.txt
index 4b142fdc..b0c524ff 100644
--- a/src/main/include/CMakeLists.txt
+++ b/src/main/include/CMakeLists.txt
@@ -128,16 +128,6 @@ else()
set(HAS_ODBC 0)
endif(LOG4CXX_ENABLE_ODBC)
-option(LOG4CXX_ENABLE_ESMTP "Support logging via libesmtp" OFF)
-if(LOG4CXX_ENABLE_ESMTP)
- CHECK_LIBRARY_EXISTS(esmtp smtp_create_session "" HAS_LIBESMTP)
- if(NOT HAS_LIBESMTP)
- message(SEND_ERROR "SMTP support with libesmtp not found but requested")
- endif()
-else()
- set(HAS_LIBESMTP 0)
-endif(LOG4CXX_ENABLE_ESMTP)
-
CHECK_INCLUDE_FILE_CXX(locale HAS_STD_LOCALE)
CHECK_FUNCTION_EXISTS(mbsrtowcs HAS_MBSRTOWCS)
CHECK_FUNCTION_EXISTS(wcstombs HAS_WCSTOMBS)
diff --git a/src/main/include/log4cxx/net/smtpappender.h b/src/main/include/log4cxx/net/smtpappender.h
index d181027d..f61125ed 100644
--- a/src/main/include/log4cxx/net/smtpappender.h
+++ b/src/main/include/log4cxx/net/smtpappender.h
@@ -28,14 +28,62 @@ namespace log4cxx
namespace net
{
/**
-Send an e-mail when a specific logging event occurs, typically on
-errors or fatal errors.
-<p>The number of logging events delivered in this e-mail depend on
-the value of <b>BufferSize</b> option. The
-<code>SMTPAppender</code> keeps only the last
-<code>BufferSize</code> logging events in its cyclic buffer. This
-keeps memory requirements at a reasonable level while still
-delivering useful application context.
+Send an e-mail when a specific logging event occurs, typically when
+an <b>ERROR</b> level logging event is sent to the appender.
+
+A value must be provided for the following <b>param</b> elements :
+- <b>smtpHost</b> -
+ The URL or IP address of the SMTP server.
+- <b>from</b> -
+ The email address in the <b>from</b> field of the message.
+- one of <b>to</b>, <b>cc</b>, <b>bcc</b> -
+ An email address in the message.
+
+The following <b>param</b> elements are optional:
+- <b>smtpPort</b> -
+ The TCP/IP port number on the SMTP server.
+ By default port 25 is assumed.
+- <b>subject</b> -
+ Content for the the <b>subject</b> field of the message.
+- <b>smtpUsername</b> -
+ Provided when the SMTP server requests authentication.
+- <b>smtpPassword</b> -
+ Provided when the SMTP server requests authentication.
+- <b>BufferSize</b> -
+ The number of logging events delivered in an e-mail.
+ The <code>SMTPAppender</code> keeps only the last
+ <code>BufferSize</code> logging events in its cyclic buffer. This
+ keeps memory requirements at a reasonable level while still
+ delivering useful application context.
+ By default 512 logging events are kept in its cyclic buffer.
+- <b>evaluatorClass</b> -
+ The registered spi::TriggeringEventEvaluator sub-class
+ that provides the <code>isTriggeringEvent</code> implementation.
+ This attribute can also be set using the <b>triggeringPolicy</b> element.
+ By default an email is sent
+ when the level of the logging event
+ is greater or equal to <b>ERROR</b>.
+
+ An example configuration is:
+~~~{.xml}
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+ <appender name="EMAIL" class="org.apache.log4j.net.SMTPAppender">
+ <param name="from" value="service_name@example.org" />
+ <param name="to" value="some_support_group@example.org" />
+ <param name="subject" value="Service error detected" />
+ <param name="SMTPHost" value="smtp.example.com"/>
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value="%-5p %c{2} - %m%n"/>
+ </layout>
+ <!-- triggeringPolicy class="SpecialTriggeringEventEvaluator" -->
+ <!-- param name="evaluatorClass" value="SpecialTriggeringEventEvaluator" -->
+ </appender>
+ <root>
+ <priority value ="INFO" />
+ <appender-ref ref="EMAIL" />
+ </root>
+</log4j:configuration>
+~~~
*/
class LOG4CXX_EXPORT SMTPAppender : public AppenderSkeleton
{
diff --git a/src/main/include/log4cxx/private/string_c11.h b/src/main/include/log4cxx/private/string_c11.h
index f7182454..4c5a1b44 100644
--- a/src/main/include/log4cxx/private/string_c11.h
+++ b/src/main/include/log4cxx/private/string_c11.h
@@ -24,7 +24,7 @@
#include <limits.h>
#if !defined(RSIZE_MAX) && defined(SSIZE_MAX)
#define RSIZE_MAX (SSIZE_MAX >> 4)
-#else !defined(RSIZE_MAX)
+#else // !defined(RSIZE_MAX)
#define RSIZE_MAX (2 << 20)
#endif
diff --git a/src/test/cpp/CMakeLists.txt b/src/test/cpp/CMakeLists.txt
index 751abf8c..35f1cf2d 100644
--- a/src/test/cpp/CMakeLists.txt
+++ b/src/test/cpp/CMakeLists.txt
@@ -107,6 +107,9 @@ foreach(testName IN LISTS ALL_LOG4CXX_TESTS)
target_compile_definitions(${testName} PRIVATE ${TEST_COMPILE_DEFINITIONS} ${LOG4CXX_COMPILE_DEFINITIONS} ${APR_COMPILE_DEFINITIONS} ${APR_UTIL_COMPILE_DEFINITIONS} )
target_include_directories(${testName} PRIVATE ${CMAKE_CURRENT_LIST_DIR} $<TARGET_PROPERTY:log4cxx,INCLUDE_DIRECTORIES>)
target_link_libraries(${testName} PRIVATE testingFramework testingUtilities log4cxx ${APR_LIBRARIES} ${APR_SYSTEM_LIBS} Threads::Threads)
+ if(HAS_LIBESMTP)
+ target_link_libraries(${testName} PRIVATE ${ESMTP_LIBRARIES})
+ endif()
add_test(NAME ${testName}
COMMAND ${testName} -v
WORKING_DIRECTORY ${UNIT_TEST_WORKING_DIR}
diff --git a/src/test/cpp/net/CMakeLists.txt b/src/test/cpp/net/CMakeLists.txt
index 32e8a17a..224e1140 100644
--- a/src/test/cpp/net/CMakeLists.txt
+++ b/src/test/cpp/net/CMakeLists.txt
@@ -26,9 +26,9 @@ else()
set(NET_TESTS "")
endif()
-if(HAS_LIBESMPT)
+if(HAS_LIBESMTP)
list(APPEND NET_TESTS smtpappendertestcase)
-endif(HAS_LIBESMPT)
+endif(HAS_LIBESMTP)
foreach(fileName IN LISTS NET_TESTS)
add_executable(${fileName} "${fileName}.cpp")
endforeach()
diff --git a/src/test/cpp/net/smtpappendertestcase.cpp b/src/test/cpp/net/smtpappendertestcase.cpp
index a3ba3770..9fb8d2dc 100644
--- a/src/test/cpp/net/smtpappendertestcase.cpp
+++ b/src/test/cpp/net/smtpappendertestcase.cpp
@@ -18,19 +18,11 @@
#define LOG4CXX_TEST 1
#include <log4cxx/private/log4cxx_private.h>
-#if LOG4CXX_HAVE_SMTP
-
#include <log4cxx/net/smtpappender.h>
#include "../appenderskeletontestcase.h"
#include <log4cxx/xml/domconfigurator.h>
#include <log4cxx/logmanager.h>
-#include <log4cxx/ttcclayout.h>
-
-using namespace log4cxx;
-using namespace log4cxx::helpers;
-using namespace log4cxx::net;
-using namespace log4cxx::xml;
-using namespace log4cxx::spi;
+#include <log4cxx/simplelayout.h>
namespace log4cxx
{
@@ -38,8 +30,7 @@ namespace net
{
class MockTriggeringEventEvaluator :
- public virtual spi::TriggeringEventEvaluator,
- public virtual helpers::ObjectImpl
+ public virtual spi::TriggeringEventEvaluator
{
public:
DECLARE_LOG4CXX_OBJECT(MockTriggeringEventEvaluator)
@@ -63,6 +54,10 @@ class MockTriggeringEventEvaluator :
}
}
+using namespace log4cxx;
+using namespace log4cxx::helpers;
+using namespace log4cxx::net;
+
IMPLEMENT_LOG4CXX_OBJECT(MockTriggeringEventEvaluator)
@@ -79,6 +74,7 @@ class SMTPAppenderTestCase : public AppenderSkeletonTestCase
LOGUNIT_TEST(testSetOptionThreshold);
LOGUNIT_TEST(testTrigger);
LOGUNIT_TEST(testInvalid);
+ //LOGUNIT_TEST(testValid);
LOGUNIT_TEST_SUITE_END();
@@ -103,29 +99,38 @@ class SMTPAppenderTestCase : public AppenderSkeletonTestCase
*/
void testTrigger()
{
- DOMConfigurator::configure("input/xml/smtpAppender1.xml");
- SMTPAppenderPtr appender(Logger::getRootLogger()->getAppender(LOG4CXX_STR("A1")));
- TriggeringEventEvaluatorPtr evaluator(appender->getEvaluator());
+ xml::DOMConfigurator::configure("input/xml/smtpAppender1.xml");
+ auto appender = log4cxx::cast<SMTPAppender>(Logger::getRootLogger()->getAppender(LOG4CXX_STR("A1")));
+ LOGUNIT_ASSERT(appender);
+ auto evaluator = appender->getEvaluator();
+ LOGUNIT_ASSERT(evaluator);
LOGUNIT_ASSERT_EQUAL(true, evaluator->instanceof(MockTriggeringEventEvaluator::getStaticClass()));
}
void testInvalid()
{
- SMTPAppenderPtr appender(new SMTPAppender());
+ auto appender = std::make_shared<SMTPAppender>();
appender->setSMTPHost(LOG4CXX_STR("smtp.invalid"));
appender->setTo(LOG4CXX_STR("you@example.invalid"));
appender->setFrom(LOG4CXX_STR("me@example.invalid"));
- appender->setLayout(new TTCCLayout());
+ appender->setLayout(std::make_shared<SimpleLayout>());
Pool p;
appender->activateOptions(p);
- LoggerPtr root(Logger::getRootLogger());
+ auto root = Logger::getRootLogger();
root->addAppender(appender);
- LOG4CXX_INFO(root, "Hello, World.")
- LOG4CXX_ERROR(root, "Sending Message")
+ LOG4CXX_INFO(root, "Hello, World.");
+ LOG4CXX_ERROR(root, "Sending Message");
}
+
+ void testValid()
+ {
+ xml::DOMConfigurator::configure("input/xml/smtpAppenderValid.xml");
+ auto root = Logger::getRootLogger();
+ LOG4CXX_INFO(root, "Hello, World.");
+ LOG4CXX_ERROR(root, "Sending Message");
+ }
};
LOGUNIT_TEST_SUITE_REGISTRATION(SMTPAppenderTestCase);
-#endif