All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.slickqa.jupiter.SlickResultLogger Maven / Gradle / Ivy

There is a newer version: 1.0.0-25
Show newest version
package com.slickqa.jupiter;

import com.slickqa.client.errors.SlickError;
import com.slickqa.client.model.LogEntry;
import com.slickqa.client.model.Result;
import com.slickqa.jupiter.annotations.SlickLogger;

import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Date;

/**
 * Implementation of SlickLogger interface.
 */
public class SlickResultLogger implements SlickLogger {
    public static int BUFFER_SIZE = 10;
    public static int MAX_SECONDS_SINCE_FIRST_ENTRY = 5;
    public static final String defaultLoggerName = "SlickLog";
    public String loggerName;
    protected LogLevel minimumLevel;
    protected SlickJunitController slick;
    protected ArrayList buffer;
    public static String NOTDEFINED = "NOTDEFINED";


    public SlickResultLogger(SlickJunitController slick) {
        this.slick = slick;
        this.minimumLevel = SlickLogger.DEFAULT_MINIMUM_LOG_LEVEL;
        buffer = new ArrayList<>(BUFFER_SIZE);
        loggerName = defaultLoggerName;
    }

    protected void uploadLogsIfNecessary() {
        if (SlickJunitController.isUsingSlick()) {
            if (buffer.size() >= BUFFER_SIZE || (buffer.size() > 0 && (((new Date()).getTime() - buffer.get(0).getEntryTime().getTime()) / 1000) >= MAX_SECONDS_SINCE_FIRST_ENTRY)) {
                flushLogs();
            }
        }
    }

    public void setLoggerName(String loggerName) {
        this.loggerName = loggerName;
    }

    @Override
    public void flushLogs() {
        try {
            if (SlickJunitController.isUsingSlick() && buffer.size() > 0) {
                SlickJunitController controller = SlickJunitControllerFactory.getControllerInstance();
                Result current = controller.getSlickClient().result(SlickJunitController.currentResult.get().getId()).get();
                if (current != null) {
                    try {
                        controller.getSlickClient().result(current.getId()).addLogs(buffer);
                    } catch (SlickError e) {
                        e.printStackTrace();
                        System.err.println("!! ERROR: Unable to post logs to slick !!");
                    } finally {
                        buffer = new ArrayList<>(BUFFER_SIZE);
                    }
                }
            }
        } catch (SlickError e) {
            System.out.println("Error flushing logs: " + e.getMessage());
        }
    }

    @Override
    public LogLevel getMinimumLogLevel() {
        return minimumLevel;
    }

    @Override
    public void setMinimumLogLevel(LogLevel newMiniumum) {
        this.minimumLevel = newMiniumum;
    }

    @Override
    public void addLogEntry(LogEntry entry) {
        if(System.getProperty(ConfigurationNames.SLICK_ENABLE_LOGS, "false").equalsIgnoreCase("true") || "slick.note".equals(entry.getLoggerName())) {
            if (SlickJunitController.isUsingSlick() && !this.slick.equals(SlickResultLogger.NOTDEFINED)) {
                buffer.add(entry);
                uploadLogsIfNecessary();
            }
            flushLogs();
        }
    }

    @Override
    public boolean isLevelEnabled(LogLevel level) {
        return level.getLevel() >= getMinimumLogLevel().getLevel();
    }

    private LogEntry getLogEntryFor(LogLevel level, String msg) {
        LogEntry entry = new LogEntry();
        entry.setEntryTime(new Date());
        entry.setLevel(level.toString());
        entry.setLoggerName(loggerName);
        entry.setMessage(msg);
        return entry;
    }

    private String getFormattedMessage(String message, Object[] arguments) {
        return MessageFormat.format(message, arguments);

    }

    @Override
    public void log(LogLevel level, String msg) {
        if (isLevelEnabled(level)) {
            addLogEntry(getLogEntryFor(level, msg));
        }
    }

    @Override
    public void log(LogLevel level, String format, Object arg) {
        if (isLevelEnabled(level)) {
            addLogEntry(getLogEntryFor(level, getFormattedMessage(format, new Object[]{arg})));
        }
    }

    @Override
    public void log(LogLevel level, String format, Object arg1, Object arg2) {
        if (isLevelEnabled(level)) {
            addLogEntry(getLogEntryFor(level, getFormattedMessage(format, new Object[]{arg1, arg2})));
        }
    }

    @Override
    public void log(LogLevel level, String format, Object... args) {
        if (isLevelEnabled(level)) {
            addLogEntry(getLogEntryFor(level, getFormattedMessage(format, args)));
        }
    }

    @Override
    public void log(LogLevel level, String msg, Throwable t) {
        if (isLevelEnabled(level)) {
            LogEntry entry = getLogEntryFor(level, msg);
            entry.setExceptionClassName(t.getClass().getName());
            entry.setExceptionMessage(t.getMessage());
            StackTraceElement[] elements = t.getStackTrace();
            ArrayList stackTrace = new ArrayList<>(elements.length);
            for (StackTraceElement element : elements) {
                stackTrace.add(element.toString());
            }

            entry.setExceptionStackTrace(stackTrace);
            addLogEntry(entry);
        }
    }

    @Override
    public boolean isTraceEnabled() {
        return isLevelEnabled(LogLevel.TRACE);
    }

    @Override
    public void trace(String msg) {
        log(LogLevel.TRACE, msg);

    }

    @Override
    public void trace(String format, Object arg) {
        log(LogLevel.TRACE, format, arg);

    }

    @Override
    public void trace(String format, Object arg1, Object arg2) {
        log(LogLevel.TRACE, format, arg1, arg2);
    }

    @Override
    public void trace(String format, Object... args) {
        log(LogLevel.TRACE, format, args);
    }

    @Override
    public void trace(String msg, Throwable t) {
        log(LogLevel.TRACE, msg, t);
    }

    @Override
    public boolean isDebugEnabled() {
        return isLevelEnabled(LogLevel.DEBUG);
    }

    @Override
    public void debug(String msg) {
        log(LogLevel.DEBUG, msg);

    }

    @Override
    public void debug(String format, Object arg) {
        log(LogLevel.DEBUG, format, arg);

    }

    @Override
    public void debug(String format, Object arg1, Object arg2) {
        log(LogLevel.DEBUG, format, arg1, arg2);
    }

    @Override
    public void debug(String format, Object... args) {
        log(LogLevel.DEBUG, format, args);
    }

    @Override
    public void debug(String msg, Throwable t) {
        log(LogLevel.DEBUG, msg, t);
    }

    @Override
    public boolean isInfoEnabled() {
        return isLevelEnabled(LogLevel.INFO);
    }

    @Override
    public void info(String msg) {
        log(LogLevel.INFO, msg);

    }

    @Override
    public void info(String format, Object arg) {
        log(LogLevel.INFO, format, arg);

    }

    @Override
    public void info(String format, Object arg1, Object arg2) {
        log(LogLevel.INFO, format, arg1, arg2);
    }

    @Override
    public void info(String format, Object... args) {
        log(LogLevel.INFO, format, args);
    }

    @Override
    public void info(String msg, Throwable t) {
        log(LogLevel.INFO, msg, t);
    }

    @Override
    public boolean isWarnEnabled() {
        return isLevelEnabled(LogLevel.WARN);
    }

    @Override
    public void warn(String msg) {
        log(LogLevel.WARN, msg);

    }

    @Override
    public void warn(String format, Object arg) {
        log(LogLevel.WARN, format, arg);

    }

    @Override
    public void warn(String format, Object arg1, Object arg2) {
        log(LogLevel.WARN, format, arg1, arg2);
    }

    @Override
    public void warn(String format, Object... args) {
        log(LogLevel.WARN, format, args);
    }

    @Override
    public void warn(String msg, Throwable t) {
        log(LogLevel.WARN, msg, t);
    }

    @Override
    public boolean isErrorEnabled() {
        return isLevelEnabled(LogLevel.ERROR);
    }

    @Override
    public void error(String msg) {
        log(LogLevel.ERROR, msg);

    }

    @Override
    public void error(String format, Object arg) {
        log(LogLevel.ERROR, format, arg);

    }

    @Override
    public void error(String format, Object arg1, Object arg2) {
        log(LogLevel.ERROR, format, arg1, arg2);
    }

    @Override
    public void error(String format, Object... args) {
        log(LogLevel.ERROR, format, args);
    }

    @Override
    public void error(String msg, Throwable t) {
        log(LogLevel.ERROR, msg, t);
    }

}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy