package org.sef4j.callstack.event.impl; import java.util.Map; import org.sef4j.callstack.event.StackEvent.CompoundPopPushStackEvent; import org.sef4j.callstack.event.StackEvent.PopStackEvent; import org.sef4j.callstack.event.StackEvent.ProgressStepStackEvent; import org.sef4j.callstack.event.StackEvent.PushStackEvent; import org.sef4j.callstack.event.StackEventVisitor; import org.sef4j.callstack.handlers.Slf4jLoggerAdapterCallStackHandler; import org.slf4j.Logger; /** * adapter StackEventVisitor (Listener) PushEvent/PopEvent -> Slf4j * * cf delegate message formatter methods: Slf4jLoggerAdapterCallStackHandler * (CallStackHandler -> Slf4j) */ public class Slf4jLoggerAdapterStackEventVisitor extends StackEventVisitor { private Logger slf4jLogger; // ------------------------------------------------------------------------ public Slf4jLoggerAdapterStackEventVisitor(Logger slf4jLogger) { this.slf4jLogger = slf4jLogger; } // ------------------------------------------------------------------------ @Override public void acceptPushStackEvent(PushStackEvent pushStackEvent) { String name = pushStackEvent.getName(); Map<String, Object> inheritedProps = pushStackEvent.getInheritedProps(); Map<String, Object> params = pushStackEvent.getParams(); int progressExpectedCount = pushStackEvent.getProgressExpectedCount(); String msg = Slf4jLoggerAdapterCallStackHandler.formatLogMessagePush(name, inheritedProps, params, progressExpectedCount); slf4jLogger.info(msg); } @Override public void acceptPopStackEvent(PopStackEvent popStackEvent) { String name = popStackEvent.getName(); long elapsedTime = popStackEvent.getElapsedTime(); String msg = Slf4jLoggerAdapterCallStackHandler.formatLogMessagePop(name, elapsedTime); slf4jLogger.info(msg); } @Override public void acceptProgressStackEvent(ProgressStepStackEvent progressStackEvent) { int progressIndex = progressStackEvent.getProgressIndex(); int progressExpectedCount = progressStackEvent.getProgressExpectedCount(); String progressMessage = progressStackEvent.getProgressMessage(); String msg = Slf4jLoggerAdapterCallStackHandler.formatLogMessageProgress( progressIndex, progressExpectedCount, progressMessage); slf4jLogger.info(msg); } @Override public void acceptCompoundStackEvent(CompoundPopPushStackEvent compoundStackEvent) { final PopStackEvent[] popEvents = compoundStackEvent.getPopEvents(); final PushStackEvent[] pushEvents = compoundStackEvent.getPushedEvents(); final ProgressStepStackEvent[] progressSteps = compoundStackEvent.getLastProgressStepEvents(); String msg = Slf4jLoggerAdapterCallStackHandler.formatLogMessageCompound(popEvents, pushEvents, progressSteps); slf4jLogger.info(msg); } }