/** Closes the log, flushing the results. */
  public void close() throws IOException {
    _isClosed = true;

    _rolloverWorker.wake();

    _rolloverWorker.close();

    synchronized (_logLock) {
      closeLogStream();
    }

    Alarm alarm = _rolloverAlarm;
    _rolloverAlarm = null;

    if (alarm != null) alarm.dequeue();
  }
  public boolean rollover() {
    long now = CurrentTime.getCurrentTime();

    if (_nextPeriodEnd <= now || _nextRolloverCheckTime.get() <= now) {
      _nextRolloverCheckTime.set(now + _rolloverCheckPeriod);
      _rolloverWorker.wake();

      return true;
    } else return false;
  }