in src/main/cpp/dbappender.cpp [138:200]
void DBAppender::activateOptions(helpers::Pool& p){
apr_status_t stat = apr_dbd_get_driver(_priv->m_pool.getAPRPool(),
_priv->driverName.c_str(),
const_cast<const apr_dbd_driver_t**>(&_priv->m_driver));
if(stat != APR_SUCCESS){
LogString errMsg = LOG4CXX_STR("Unable to get driver named ");
LOG4CXX_DECODE_CHAR(driverName, _priv->driverName);
errMsg.append(driverName);
LogLog::error(errMsg);
_priv->errorHandler->error(errMsg);
return;
}
stat = apr_dbd_open(_priv->m_driver,
_priv->m_pool.getAPRPool(),
_priv->driverParams.c_str(),
&_priv->m_databaseHandle);
if(stat != APR_SUCCESS){
LogLog::error(LOG4CXX_STR("Unable to open database"));
_priv->errorHandler->error(LOG4CXX_STR("Unable to open database"));
return;
}
if(!_priv->databaseName.empty()){
apr_dbd_set_dbname(_priv->m_driver,
_priv->m_pool.getAPRPool(),
_priv->m_databaseHandle,
_priv->databaseName.c_str());
}
stat = apr_dbd_prepare(_priv->m_driver,
_priv->m_pool.getAPRPool(),
_priv->m_databaseHandle,
_priv->sqlStatement.c_str(),
"log_insert",
&_priv->preparedStmt);
if(stat != APR_SUCCESS){
LogString error = LOG4CXX_STR("Unable to prepare statement: ");
std::string dbdErr(apr_dbd_error(_priv->m_driver, _priv->m_databaseHandle, stat));
LOG4CXX_DECODE_CHAR(dbdErrLS, dbdErr);
error.append(dbdErrLS);
LogLog::error(error);
_priv->errorHandler->error(error);
return;
}
auto specs = getFormatSpecifiers();
for (auto& name : _priv->mappedName)
{
auto pItem = specs.find(StringHelper::toLowerCase(name));
if (specs.end() == pItem)
LogLog::error(name + LOG4CXX_STR(" is not a supported ColumnMapping value"));
else
{
std::vector<LogString> options;
if (LOG4CXX_STR("time") == pItem->first)
options.push_back(LOG4CXX_STR("yyyy-MM-ddTHH:mm:ss.SSS"));
pattern::LoggingEventPatternConverterPtr converter = log4cxx::cast<LoggingEventPatternConverter>((pItem->second)(options));
_priv->converters.push_back(converter);
}
}
}