Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 13 additions & 7 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -58,13 +58,19 @@ if(ENABLE_COVERAGE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
endif()

# Find Apache Runtime
option(APR_STATIC "Link to the APR static library" OFF)
find_package(APR REQUIRED)

# Find Apache Runtime Utilities
option(APU_STATIC "Link to the APR-Util static library" OFF)
find_package(APR-Util REQUIRED)
option(ENABLE_APR "Enable APR for cross-platform support" ON)
if(ENABLE_APR)
set(LOG4CXX_ENABLE_APR 1)
# Find Apache Runtime
option(APR_STATIC "Link to the APR static library" OFF)
#find_package(APR REQUIRED)

# Find Apache Runtime Utilities
option(APU_STATIC "Link to the APR-Util static library" OFF)
#find_package(APR-Util REQUIRED)
else()
set(LOG4CXX_ENABLE_APR 0)
endif(ENABLE_APR)

if(NOT MSVC)
# The pthread library is used to name threads and mask signals
Expand Down
18 changes: 15 additions & 3 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,21 @@ include(${CMAKE_CURRENT_LIST_DIR}/cmake/boost-fallback/boost-fallback.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/cmake/compiler-features/check-compiler-support.cmake)

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})
target_compile_definitions(log4cxx PRIVATE
${LOG4CXX_COMPILE_DEFINITIONS}
$<$<BOOL:${ENABLE_APR}>:${APR_COMPILE_DEFINITIONS}>
$<$<BOOL:${ENABLE_APR}>:${APR_UTIL_COMPILE_DEFINITIONS}>
)
target_include_directories(log4cxx INTERFACE $<INSTALL_INTERFACE:include> PRIVATE
$<$<BOOL:${ENABLE_APR}>:${APR_INCLUDE_DIR}>
$<$<BOOL:${ENABLE_APR}>:${APR_UTIL_INCLUDE_DIR}>
)
target_link_libraries(log4cxx PRIVATE
$<$<BOOL:${ENABLE_APR}>:${APR_UTIL_LIBRARIES}>
${EXPAT_LIBRARIES}
$<$<BOOL:${ENABLE_APR}>:${APR_LIBRARIES}>
$<$<BOOL:${ENABLE_APR}>:${APR_SYSTEM_LIBS}>
)
if(HAS_LIBESMTP)
target_include_directories(log4cxx PRIVATE ${ESMTP_INCLUDE_DIR})
target_link_libraries(log4cxx PRIVATE ${ESMTP_LIBRARIES})
Expand Down
13 changes: 9 additions & 4 deletions src/main/cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,15 @@ if(${ENABLE_FMT_LAYOUT})
)
endif()

if(${ENABLE_APR})
list(APPEND extra_classes
dbappender.cpp
inetaddress.cpp
odbcappender.cpp
pool.cpp
)
endif()

target_sources(log4cxx
PRIVATE
action.cpp
Expand Down Expand Up @@ -98,7 +107,6 @@ target_sources(log4cxx
date.cpp
dateformat.cpp
datepatternconverter.cpp
dbappender.cpp
defaultconfigurator.cpp
defaultloggerfactory.cpp
defaultrepositoryselector.cpp
Expand All @@ -121,7 +129,6 @@ target_sources(log4cxx
hexdump.cpp
hierarchy.cpp
htmllayout.cpp
inetaddress.cpp
inputstream.cpp
inputstreamreader.cpp
integer.cpp
Expand Down Expand Up @@ -159,7 +166,6 @@ target_sources(log4cxx
mdcpatternconverter.cpp
ndcpatternconverter.cpp
nteventlogappender.cpp
odbcappender.cpp
onlyonceerrorhandler.cpp
optionconverter.cpp
outputdebugstringappender.cpp
Expand All @@ -168,7 +174,6 @@ target_sources(log4cxx
patternconverter.cpp
patternlayout.cpp
patternparser.cpp
pool.cpp
properties.cpp
propertiespatternconverter.cpp
propertyconfigurator.cpp
Expand Down
4 changes: 2 additions & 2 deletions src/main/cpp/action.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,15 @@ Action::~Action()
/**
* {@inheritDoc}
*/
void Action::run(LOG4CXX_NS::helpers::Pool& pool1)
void Action::run()
{
std::lock_guard<std::mutex> lock(m_priv->mutex);

if (!m_priv->interrupted)
{
try
{
execute(pool1);
execute();
}
catch (std::exception& ex)
{
Expand Down
4 changes: 2 additions & 2 deletions src/main/cpp/appenderattachableimpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,15 +96,15 @@ void AppenderAttachableImpl::addAppender(const AppenderPtr newAppender)
m_priv = std::make_unique<priv_data>(AppenderList{newAppender});
}

int AppenderAttachableImpl::appendLoopOnAppenders(const spi::LoggingEventPtr& event, Pool& p)
int AppenderAttachableImpl::appendLoopOnAppenders(const spi::LoggingEventPtr& event)
{
int result = 0;
if (m_priv)
{
auto allAppenders = m_priv->getAppenders();
for (auto& appender : *allAppenders)
{
appender->doAppend(event, p);
appender->doAppend(event);
++result;
}
}
Expand Down
8 changes: 4 additions & 4 deletions src/main/cpp/appenderskeleton.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,14 +88,14 @@ bool AppenderSkeleton::isAsSevereAsThreshold(const LevelPtr& level) const
return ((level == 0) || level->isGreaterOrEqual(m_priv->threshold));
}

void AppenderSkeleton::doAppend(const spi::LoggingEventPtr& event, Pool& pool1)
void AppenderSkeleton::doAppend(const spi::LoggingEventPtr& event)
{
std::lock_guard<std::recursive_mutex> lock(m_priv->mutex);

doAppendImpl(event, pool1);
doAppendImpl(event);
}

void AppenderSkeleton::doAppendImpl(const spi::LoggingEventPtr& event, Pool& pool)
void AppenderSkeleton::doAppendImpl(const spi::LoggingEventPtr& event)
{
if (m_priv->closed)
{
Expand All @@ -104,7 +104,7 @@ void AppenderSkeleton::doAppendImpl(const spi::LoggingEventPtr& event, Pool& poo
}
else if (isAsSevereAsThreshold(event->getLevel()) && isAccepted(event))
{
append(event, pool);
append(event);
}
}

Expand Down
19 changes: 14 additions & 5 deletions src/main/cpp/aprinitializer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,19 @@
#define LOG4CXX 1
#endif
#include <log4cxx/helpers/aprinitializer.h>
#include <apr_pools.h>
#include <assert.h>
#include <log4cxx/helpers/threadspecificdata.h>
#include <apr_thread_proc.h>
#include <log4cxx/helpers/date.h>
#include <log4cxx/helpers/loglog.h>
#include <vector>
#include <algorithm>
#include <mutex>

#ifdef LOG4CXX_ENABLE_APR
#include <apr_pools.h>
#include <apr_thread_proc.h>
#endif

using namespace LOG4CXX_NS::helpers;
using namespace LOG4CXX_NS;

Expand All @@ -41,7 +44,7 @@ using IdentifiedObject = std::pair<size_t, ObjectPtr>;
struct APRInitializer::APRInitializerPrivate{
APRInitializerPrivate() :
p(0),
startTime(0),
startTime(std::chrono::system_clock::now()),
tlsKey(0){

}
Expand Down Expand Up @@ -81,11 +84,15 @@ struct apr_environment
{
apr_environment()
{
#ifdef LOG4CXX_ENABLE_APR
apr_initialize();
#endif
}
~apr_environment()
{
#ifdef LOG4CXX_ENABLE_APR
apr_terminate();
#endif
}
};

Expand All @@ -95,12 +102,14 @@ struct apr_environment
APRInitializer::APRInitializer() :
m_priv(std::make_unique<APRInitializerPrivate>())
{
apr_pool_create(&m_priv->p, NULL);
m_priv->startTime = Date::currentTime();
#ifdef LOG4CXX_ENABLE_APR
apr_pool_create(&m_priv->p, NULL);
#if APR_HAS_THREADS
apr_status_t stat = apr_threadkey_private_create(&m_priv->tlsKey, tlsDestructImpl, m_priv->p);
assert(stat == APR_SUCCESS);
#endif
#endif
m_priv->startTime = Date::currentTime();
}

APRInitializer::~APRInitializer()
Expand Down
38 changes: 17 additions & 21 deletions src/main/cpp/asyncappender.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -104,12 +104,11 @@ class DiscardSummary
*
* @return the new event.
*/
LoggingEventPtr createEvent(Pool& p);
LoggingEventPtr createEvent();

#if LOG4CXX_ABI_VERSION <= 15
static
::LOG4CXX_NS::spi::LoggingEventPtr createEvent(::LOG4CXX_NS::helpers::Pool& p,
size_t discardedCount);
::LOG4CXX_NS::spi::LoggingEventPtr createEvent(size_t discardedCount);
#endif

/**
Expand Down Expand Up @@ -297,16 +296,16 @@ void AsyncAppender::setOption(const LogString& option,
}


void AsyncAppender::doAppend(const spi::LoggingEventPtr& event, Pool& pool1)
void AsyncAppender::doAppend(const spi::LoggingEventPtr& event)
{
doAppendImpl(event, pool1);
doAppendImpl(event);
}

void AsyncAppender::append(const spi::LoggingEventPtr& event, Pool& p)
void AsyncAppender::append(const spi::LoggingEventPtr& event)
{
if (priv->bufferSize <= 0)
{
priv->appenders.appendLoopOnAppenders(event, p);
priv->appenders.appendLoopOnAppenders(event);
return;
}

Expand Down Expand Up @@ -535,10 +534,10 @@ void DiscardSummary::add(const LoggingEventPtr& event)
++this->count;
}

LoggingEventPtr DiscardSummary::createEvent(Pool& p)
LoggingEventPtr DiscardSummary::createEvent()
{
LogString msg(LOG4CXX_STR("Discarded "));
StringHelper::toString(this->count, p, msg);
StringHelper::toString(this->count, msg);
msg.append(LOG4CXX_STR(" messages ") + this->reason + LOG4CXX_STR(" including: "));
msg.append(this->maxEvent->getRenderedMessage());
return std::make_shared<LoggingEvent>
Expand All @@ -551,11 +550,10 @@ LoggingEventPtr DiscardSummary::createEvent(Pool& p)

#if LOG4CXX_ABI_VERSION <= 15
::LOG4CXX_NS::spi::LoggingEventPtr
DiscardSummary::createEvent(::LOG4CXX_NS::helpers::Pool& p,
size_t discardedCount)
DiscardSummary::createEvent(size_t discardedCount)
{
LogString msg(LOG4CXX_STR("Discarded "));
StringHelper::toString(discardedCount, p, msg);
StringHelper::toString(discardedCount, msg);
msg.append(LOG4CXX_STR(" messages due to a full event buffer"));

return std::make_shared<LoggingEvent>(
Expand All @@ -577,8 +575,7 @@ void AsyncAppender::dispatch()
bool isActive = true;

while (isActive)
{
Pool p;
{
LoggingEventList events;
events.reserve(priv->bufferSize);
for (int count = 0; count < 2 && priv->dispatchedCount == priv->commitCount; ++count)
Expand Down Expand Up @@ -608,7 +605,7 @@ void AsyncAppender::dispatch()
blockedCount += priv->blockedCount;
for (auto& discardItem : priv->discardMap)
{
events.push_back(discardItem.second.createEvent(p));
events.push_back(discardItem.second.createEvent());
discardCount += discardItem.second.getCount();
}
priv->discardMap.clear();
Expand All @@ -618,7 +615,7 @@ void AsyncAppender::dispatch()
{
try
{
priv->appenders.appendLoopOnAppenders(item, p);
priv->appenders.appendLoopOnAppenders(item);
}
catch (std::exception& ex)
{
Expand All @@ -640,8 +637,7 @@ void AsyncAppender::dispatch()
++iterationCount;
}
if (LogLog::isDebugEnabled())
{
Pool p;
{
LogString msg(LOG4CXX_STR("[") + getName() + LOG4CXX_STR("] AsyncAppender"));
#ifdef _DEBUG
msg += LOG4CXX_STR(" iterationCount ");
Expand All @@ -654,14 +650,14 @@ void AsyncAppender::dispatch()
StringHelper::toString(priv->commitCount, p, msg);
#endif
msg += LOG4CXX_STR(" dispatchedCount ");
StringHelper::toString(priv->dispatchedCount, p, msg);
StringHelper::toString(priv->dispatchedCount, msg);
msg += LOG4CXX_STR(" discardCount ");
StringHelper::toString(discardCount, p, msg);
StringHelper::toString(discardCount, msg);
msg += LOG4CXX_STR(" pendingCountHistogram");
for (auto item : pendingCountHistogram)
{
msg += logchar(' ');
StringHelper::toString(item, p, msg);
StringHelper::toString(item, msg);
}
LogLog::debug(msg);
}
Expand Down
16 changes: 8 additions & 8 deletions src/main/cpp/bufferedwriter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,32 +49,32 @@ BufferedWriter::~BufferedWriter()
{
}

void BufferedWriter::close(Pool& p)
void BufferedWriter::close()
{
flush(p);
m_priv->out->close(p);
flush();
m_priv->out->close();
}

void BufferedWriter::flush(Pool& p)
void BufferedWriter::flush()
{
if (m_priv->buf.length() > 0)
{
m_priv->out->write(m_priv->buf, p);
m_priv->out->write(m_priv->buf);
m_priv->buf.erase(m_priv->buf.begin(), m_priv->buf.end());
}
}

void BufferedWriter::write(const LogString& str, Pool& p)
void BufferedWriter::write(const LogString& str)
{
if (m_priv->buf.length() + str.length() > m_priv->sz)
{
m_priv->out->write(m_priv->buf, p);
m_priv->out->write(m_priv->buf);
m_priv->buf.erase(m_priv->buf.begin(), m_priv->buf.end());
}

if (str.length() > m_priv->sz)
{
m_priv->out->write(str, p);
m_priv->out->write(str);
}
else
{
Expand Down
Loading
Loading