#include <pantheios/pantheios.hpp>
#include <pantheios/backend.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 0;
}
PANTHEIOS_CALL(void) pantheios_fe_uninit(void* )
{}
PANTHEIOS_CALL(char const*) pantheios_fe_getProcessIdentity(void* )
{
return "example.cpp.wrap_3pty_log_lib";
}
PANTHEIOS_CALL(int) pantheios_fe_isSeverityLogged(void* , int severity, int )
{
using namespace log4cxx;
using namespace log4cxx::helpers;
LevelPtr level;
switch(severity & 0x07)
{
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;
BasicConfigurator::configure();
return 0;
}
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;
}