package org.syftkog.web.test.framework; import java.text.DecimalFormat; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @author BenjaminLimb */ public class StepLogger { private final static int printLevel = getLevel(PropertiesRetriever.getString("StepLogger.level", "2")); //ERROR, WARN, INFO, DEBUG, TRACE public static int getLevel(String textLevel) { switch (textLevel) { case "ERROR": case "0": return ERROR; case "WARN": case "1": return WARN; case "INFO": case "2": return INFO; case "DEBUG": case "3": return DEBUG; case "TRACE": case "4": return TRACE; } throw new RuntimeException(textLevel + " is not a valid log level"); } /** * */ public static final int ERROR = 0; /** * */ public static final int WARN = 1; /** * */ public static final int INFO = 2; /** * */ public static final int DEBUG = 3; /** * */ public static final int TRACE = 4; /** * */ public final Logger LOG = LoggerFactory.getLogger(StepLogger.class); private StringBuilder logStringBuilder; private int currentStep; private long startTime; /** * */ public StepLogger() { logStringBuilder = new StringBuilder(); currentStep = 0; } /** * * @param level * @param text */ public void log(int level, String text) { if (currentStep == 0) { startTime = System.currentTimeMillis(); } StringBuilder stepText = new StringBuilder(); long currentTime = System.currentTimeMillis(); DecimalFormat df = new DecimalFormat("#0.00"); double durationSeconds = ((double) (currentTime - startTime)) / 1000.0; String timeString = df.format(durationSeconds); stepText.append(currentStep++).append(".") .append(" ").append("Time:").append(timeString).append("s") .append(" ").append("Thread:").append(Thread.currentThread().getId()) .append(" ") .append(text); switch (level) { case ERROR: LOG.error(stepText.toString()); break; case WARN: LOG.warn(stepText.toString()); break; case INFO: LOG.info(stepText.toString()); break; case DEBUG: LOG.debug(stepText.toString()); break; case TRACE: LOG.trace(stepText.toString()); break; } if (level <= printLevel) { stepText.append("\n"); logStringBuilder.append(stepText); } } /** * * @param text */ public void log(String text) { log(INFO, text); } /** * * @return */ public String getText() { return logStringBuilder.toString(); } /** * * @return */ public String clear() { String output = getText(); init(); return output; } /** * */ public void init() { this.logStringBuilder = new StringBuilder(); currentStep = 0; } }