in src/main/cpp/rollingfileappender.cpp [308:448]
bool RollingFileAppender::rolloverInternal(Pool& p)
{
//
// can't roll without a policy
//
if (_priv->rollingPolicy != NULL)
{
{
try
{
RolloverDescriptionPtr rollover1(_priv->rollingPolicy->rollover(this->getFile(), this->getAppend(), p));
if (rollover1 != NULL)
{
if (rollover1->getActiveFileName() == getFile())
{
closeWriter();
bool success = true;
if (rollover1->getSynchronous() != NULL)
{
success = false;
try
{
success = rollover1->getSynchronous()->execute(p);
}
catch (std::exception& ex)
{
LOG4CXX_DECODE_CHAR(lsMsg, ex.what());
LogString errorMsg = LOG4CXX_STR("Exception on rollover: ");
errorMsg.append(lsMsg);
LogLog::error(errorMsg);
_priv->errorHandler->error(lsMsg, ex, 0);
}
}
if (success)
{
if (rollover1->getAppend())
{
_priv->fileLength = File().setPath(rollover1->getActiveFileName()).length(p);
}
else
{
_priv->fileLength = 0;
}
//
// async action not yet implemented
//
ActionPtr asyncAction(rollover1->getAsynchronous());
if (asyncAction != NULL)
{
asyncAction->execute(p);
}
setFileInternal(
rollover1->getActiveFileName(), rollover1->getAppend(),
_priv->bufferedIO, _priv->bufferSize, p);
}
else
{
setFileInternal(
rollover1->getActiveFileName(), true, _priv->bufferedIO, _priv->bufferSize, p);
}
}
else
{
closeWriter();
setFileInternal(rollover1->getActiveFileName());
// Call activateOptions to create any intermediate directories(if required)
FileAppender::activateOptionsInternal(p);
OutputStreamPtr os(new FileOutputStream(
rollover1->getActiveFileName(), rollover1->getAppend()));
WriterPtr newWriter(createWriter(os));
setWriterInternal(newWriter);
bool success = true;
if (rollover1->getSynchronous() != NULL)
{
success = false;
try
{
success = rollover1->getSynchronous()->execute(p);
}
catch (std::exception& ex)
{
LOG4CXX_DECODE_CHAR(lsMsg, ex.what());
LogString errorMsg = LOG4CXX_STR("Exception during rollover: ");
errorMsg.append(lsMsg);
LogLog::warn(errorMsg);
_priv->errorHandler->error(lsMsg, ex, 0);
}
}
if (success)
{
if (rollover1->getAppend())
{
_priv->fileLength = File().setPath(rollover1->getActiveFileName()).length(p);
}
else
{
_priv->fileLength = 0;
}
//
// async action not yet implemented
//
ActionPtr asyncAction(rollover1->getAsynchronous());
if (asyncAction != NULL)
{
asyncAction->execute(p);
}
}
writeHeader(p);
}
return true;
}
}
catch (std::exception& ex)
{
LOG4CXX_DECODE_CHAR(lsMsg, ex.what());
LogString errorMsg = LOG4CXX_STR("Exception during rollover: ");
errorMsg.append(lsMsg);
LogLog::warn(errorMsg);
_priv->errorHandler->error(lsMsg, ex, 0);
}
}
}
return false;
}