#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 <log4cplus/logger.h>
#include <log4cplus/configurator.h>
#include <log4cplus/helpers/loglog.h>
#include <log4cplus/helpers/stringhelper.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 std;
using namespace log4cplus;
using namespace log4cplus::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");
pantheios::log_INFORMATIONAL("stmt#2");
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_log4cplus";
}
PANTHEIOS_CALL(int) pantheios_fe_isSeverityLogged(
void*
, int severity
, int
)
{
using namespace std;
using namespace log4cplus;
using namespace log4cplus::helpers;
LogLevel level;
switch(severity & 0x0f)
{
case PANTHEIOS_SEV_EMERGENCY:
case PANTHEIOS_SEV_ALERT:
level = FATAL_LOG_LEVEL;
break;
case PANTHEIOS_SEV_CRITICAL:
case PANTHEIOS_SEV_ERROR:
level = ERROR_LOG_LEVEL;
break;
case PANTHEIOS_SEV_WARNING:
level = WARN_LOG_LEVEL;
break;
case PANTHEIOS_SEV_NOTICE:
case PANTHEIOS_SEV_INFORMATIONAL:
level = INFO_LOG_LEVEL;
break;
case PANTHEIOS_SEV_DEBUG:
level = DEBUG_LOG_LEVEL;
break;
}
Logger root = Logger::getRoot();
return root.isEnabledFor(level);
}
PANTHEIOS_CALL(int) pantheios_be_init(
char const* processIdentity
, void*
, void**
)
{
using namespace std;
using namespace log4cplus;
using namespace log4cplus::helpers;
try
{
BasicConfigurator::doConfigure();
}
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 std;
using namespace log4cplus;
using namespace log4cplus::helpers;
severity &= 0x07;
Logger root = Logger::getRoot();
switch(severity)
{
case PANTHEIOS_SEV_EMERGENCY:
case PANTHEIOS_SEV_ALERT:
LOG4CPLUS_FATAL(root, entry);
break;
case PANTHEIOS_SEV_CRITICAL:
case PANTHEIOS_SEV_ERROR:
LOG4CPLUS_ERROR(root, entry);
break;
case PANTHEIOS_SEV_WARNING:
LOG4CPLUS_WARN(root, entry);
break;
case PANTHEIOS_SEV_NOTICE:
case PANTHEIOS_SEV_INFORMATIONAL:
LOG4CPLUS_INFO(root, entry);
break;
case PANTHEIOS_SEV_DEBUG:
LOG4CPLUS_DEBUG(root, entry);
break;
}
return cchEntry;
}