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

ru.yandex.qatools.allure.logging.ANSIConsoleAppender Maven / Gradle / Ivy

There is a newer version: 1.5.4
Show newest version
package ru.yandex.qatools.allure.logging;

import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Priority;
import org.apache.log4j.spi.LoggingEvent;

/**
 * @author Artem Eroshenko 
 */
public class ANSIConsoleAppender extends ConsoleAppender {

    private static final int NORMAL = 0;
    private static final int BRIGHT = 1;
    private static final int FOREGROUND_RED = 31;
    private static final int FOREGROUND_GREEN = 32;
    private static final int FOREGROUND_YELLOW = 33;
    private static final int FOREGROUND_CYAN = 36;

    private static final String PREFIX = "\u001b[";
    private static final String SUFFIX = "m";
    private static final char SEPARATOR = ';';
    private static final String END_COLOUR = PREFIX + SUFFIX;

    private static final String FATAL_COLOUR = color(FOREGROUND_RED, true);
    private static final String ERROR_COLOUR = color(FOREGROUND_RED);
    private static final String WARN_COLOUR = color(FOREGROUND_YELLOW);
    private static final String INFO_COLOUR = color(FOREGROUND_GREEN);
    private static final String DEBUG_COLOUR = color(FOREGROUND_CYAN);

    /**
     * Wraps the ANSI control characters around the
     * output from the super-class Appender.
     */

    @Override
    protected void subAppend(LoggingEvent event) {
        if (!Level.INFO.equals(event.getLevel())) {
            this.qw.write(getColour(event.getLevel()));
            this.qw.write(event.getLevel().toString() + ": ");
            this.qw.write(END_COLOUR);
        }
        super.subAppend(event);
    }

    /**
     * Get the appropriate control characters to change
     * the colour for the specified logging level.
     */
    private String getColour(Level level) {
        switch (level.toInt()) {
            case Priority.FATAL_INT:
                return FATAL_COLOUR;
            case Priority.ERROR_INT:
                return ERROR_COLOUR;
            case Priority.WARN_INT:
                return WARN_COLOUR;
            case Priority.DEBUG_INT:
                return DEBUG_COLOUR;
            default:
                return INFO_COLOUR;
        }
    }

    /**
     * Shortcut for {@link #color(int, boolean)}.
     */
    private static String color(int color) {
        return color(color, false);
    }

    /**
     * Create control characters for given colors.
     */
    private static String color(int color, boolean isBright) {
        return PREFIX + (isBright ? BRIGHT : NORMAL) + SEPARATOR + color + SUFFIX;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy