in src/main/cpp/rollingfileappender.cpp [284:419]
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)
{
LogString msg(LOG4CXX_STR("Rollover of ["));
msg.append(getFile());
msg.append(LOG4CXX_STR("] failed"));
_priv->errorHandler->error(msg, ex, 0);
}
}
bool appendToExisting = true;
if (success)
{
appendToExisting = rollover1->getAppend();
if (appendToExisting)
{
_priv->fileLength = File().setPath(rollover1->getActiveFileName()).length(p);
}
else
{
_priv->fileLength = 0;
}
ActionPtr asyncAction(rollover1->getAsynchronous());
if (asyncAction != NULL)
{
try
{
asyncAction->execute(p);
}
catch (std::exception& ex)
{
LogString msg(LOG4CXX_STR("Rollover of ["));
msg.append(getFile());
msg.append(LOG4CXX_STR("] failed"));
_priv->errorHandler->error(msg, ex, 0);
}
}
}
setFileInternal(rollover1->getActiveFileName(), appendToExisting, _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)
{
LogString msg(LOG4CXX_STR("Rollover of ["));
msg.append(getFile());
msg.append(LOG4CXX_STR("] failed"));
_priv->errorHandler->error(msg, ex, 0);
}
}
if (success)
{
if (rollover1->getAppend())
{
_priv->fileLength = File().setPath(rollover1->getActiveFileName()).length(p);
}
else
{
_priv->fileLength = 0;
}
ActionPtr asyncAction(rollover1->getAsynchronous());
if (asyncAction != NULL)
{
asyncAction->execute(p);
}
}
writeHeader(p);
}
return true;
}
}
catch (std::exception& ex)
{
LogString msg(LOG4CXX_STR("Rollover of ["));
msg.append(getFile());
msg.append(LOG4CXX_STR("] failed"));
_priv->errorHandler->error(msg, ex, 0);
}
}
}
return false;
}