public void logTaskEnd(final Task<?> task)
  {
    if (_planLogger.isTraceEnabled())
    {
      _planLogger.trace(END_TASK_TRACE_FORMAT,
          new Object[]{_planId, task.getName(),
              elapsedMillis(task),
              ResultType.fromTask(task), stringValue(task)});
    }
    else if (_planLogger.isDebugEnabled())
    {
      _planLogger.debug(END_TASK_DEBUG_FORMAT,
                        new Object[] {_planId, task.getName(),
                                      elapsedMillis(task), ResultType.fromTask(task)});
    }
    else if (_root == task && _rootLogger.isTraceEnabled())
    {
      _rootLogger.trace(END_TASK_TRACE_FORMAT,
          new Object[]{_planId, task.getName(),
              elapsedMillis(task),
              ResultType.fromTask(task), stringValue(task)});
    }
    else if (_root == task && _rootLogger.isDebugEnabled())
    {
      _rootLogger.debug(END_TASK_DEBUG_FORMAT,
                        new Object[] {_planId, task.getName(),
                            elapsedMillis(task), ResultType.fromTask(task)});
    }
    else if (_allLogger.isTraceEnabled())
    {
      _allLogger.trace(END_TASK_TRACE_FORMAT,
                       new Object[] {_planId, task.getName(),
                           elapsedMillis(task),
                           ResultType.fromTask(task), stringValue(task)});
    }
    else if (_allLogger.isDebugEnabled())
    {
      _allLogger.debug(END_TASK_DEBUG_FORMAT,
                       new Object[] {_planId, task.getName(),
                           elapsedMillis(task), ResultType.fromTask(task)});
    }
  }