#define PANTHEIOS_NO_INCLUDE_OS_AND_3PTYLIB_STRING_ACCESS // Faster compilation
#include <pantheios/pantheios.hpp>
#include <pantheios/backend.h>
#include <pantheios/init_codes.h>
#include <log4cxx/logger.h>
#include <log4cxx/hierarchy.h>
#include <log4cxx/basicconfigurator.h>
#include <log4cxx/helpers/exception.h>
#include <log4cxx/ndc.h>
#include <exception>
#include <new>
#include <string>
#include <stdlib.h>
#ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
# if defined(STLSOFT_COMPILER_IS_MSVC)
# pragma warning(disable : 4702)
# endif
#endif
int main()
{
try
{
using namespace log4cxx;
using namespace log4cxx::helpers;
pantheios::log_DEBUG("debug stmt");
pantheios::log_INFORMATIONAL("informational stmt");
pantheios::log_NOTICE("notice stmt");
pantheios::log_WARNING("warning stmt");
pantheios::log_ERROR("error stmt");
pantheios::log_CRITICAL("critical stmt");
pantheios::log_ALERT("alert stmt");
pantheios::log_EMERGENCY("emergency stmt");
NDC::push(_T("trivial context"));
pantheios::log_INFORMATIONAL("stmt#2");
NDC::pop();
pantheios::log_INFORMATIONAL("stmt#3");
return EXIT_SUCCESS;
}
catch(std::bad_alloc&)
{
pantheios::log(pantheios::alert, "out of memory");
}
catch(std::exception& x)
{
pantheios::log_CRITICAL("Exception: ", x);
}
catch(...)
{
pantheios::logputs(pantheios::emergency, "Unexpected unknown error");
}
return EXIT_FAILURE;
}
PANTHEIOS_CALL(int) pantheios_fe_init(
int
, void**
)
{
return PANTHEIOS_INIT_RC_SUCCESS;
}
PANTHEIOS_CALL(void) pantheios_fe_uninit(void* )
{}
PANTHEIOS_CALL(char const*) pantheios_fe_getProcessIdentity(void* )
{
return "example.cpp.custom.wrap_log4cxx";
}
PANTHEIOS_CALL(int) pantheios_fe_isSeverityLogged(
void*
, int severity
, int
)
{
using namespace log4cxx;
using namespace log4cxx::helpers;
LevelPtr level;
switch(severity & 0x0f)
{
case PANTHEIOS_SEV_EMERGENCY:
case PANTHEIOS_SEV_ALERT:
level = Level::FATAL;
break;
case PANTHEIOS_SEV_CRITICAL:
case PANTHEIOS_SEV_ERROR:
level = Level::ERROR;
break;
case PANTHEIOS_SEV_WARNING:
level = Level::WARN;
break;
case PANTHEIOS_SEV_NOTICE:
case PANTHEIOS_SEV_INFORMATIONAL:
level = Level::INFO;
break;
case PANTHEIOS_SEV_DEBUG:
level = Level::DEBUG;
break;
}
LoggerPtr rootLogger = Logger::getRootLogger();
return rootLogger->isEnabledFor(level);
}
PANTHEIOS_CALL(int) pantheios_be_init(
char const*
, void*
, void**
)
{
using namespace log4cxx;
using namespace log4cxx::helpers;
try
{
BasicConfigurator::configure();
}
catch(std::bad_alloc&)
{
pantheios::util::onBailOut(PANTHEIOS_LOG_ALERT, "failed to initialise back-end", processIdentity, "out of memory");
return PANTHEIOS_INIT_RC_OUT_OF_MEMORY
}
catch(std::exception& x)
{
pantheios::util::onBailOut(PANTHEIOS_LOG_ALERT, "failed to initialise back-end", processIdentity, x.what());
return PANTHEIOS_INIT_RC_UNSPECIFIED_EXCEPTION;
}
return PANTHEIOS_INIT_RC_SUCCESS;
}
PANTHEIOS_CALL(void) pantheios_be_uninit(void* )
{}
PANTHEIOS_CALL(int) pantheios_be_logEntry(
void*
, void*
, int severity
, char const* entry
, size_t cchEntry
)
{
using namespace log4cxx;
using namespace log4cxx::helpers;
severity &= 0x07;
LoggerPtr rootLogger = Logger::getRootLogger();
switch(severity)
{
case PANTHEIOS_SEV_EMERGENCY:
case PANTHEIOS_SEV_ALERT:
rootLogger->fatal(entry);
break;
case PANTHEIOS_SEV_CRITICAL:
case PANTHEIOS_SEV_ERROR:
rootLogger->error(entry);
break;
case PANTHEIOS_SEV_WARNING:
rootLogger->warn(entry);
break;
case PANTHEIOS_SEV_NOTICE:
case PANTHEIOS_SEV_INFORMATIONAL:
rootLogger->info(entry);
break;
case PANTHEIOS_SEV_DEBUG:
rootLogger->debug(entry);
break;
}
return cchEntry;
}