public synchronized void report(Action action, String message, long elapsed) {
AttrList attribs = new AttrList();
attribs.addAttribute(THREAD_ATTRIB, Thread.currentThread().getName());
attribs.addAttribute(NAME_ATTRIB, action.getClass().getName());
attribs.addAttribute(ELAPSED_ATTRIB, Long.toString(elapsed));
attribs.addAttribute(ID_ATTRIB, action.getId());
if (action.getParent() != null && !(action.getParent() instanceof ActionThread))
attribs.addAttribute(PARENT_ATTRIB, action.getParent().getId());
if (action.getDescription() != null)
attribs.addAttribute(DESCRIPTION_ATTRIB, action.getDescription());
if (action.getLastResult() != null)