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

org.hyplogger.LevelLogger Maven / Gradle / Ivy

package org.hyplogger;

import org.slf4j.Logger;

import java.util.Stack;

public class LevelLogger {

    private static final Stack logSteps = new Stack<>();

    static {
        logSteps.push((level, message, throwable, logger) -> level.log(logger, message, throwable));
    }

    public static void registerLogStep(LogStep logStep) {
        logSteps.push(logStep);
    }

    public static void unregisterLogStep(LogStep logStep) {
        logSteps.remove(logStep);
    }

    public static Log level(Levels level) {
        return new Log(level, logSteps);
    }

    public static Log debug() {
        return level(Levels.DEBUG);
    }

    public static Log info() {
        return level(Levels.INFO);
    }

    public static Log warn() {
        return level(Levels.WARN);
    }

    public static Log error() {
        return level(Levels.ERROR);
    }

    public enum Levels {
        DEBUG {
            @Override
            void log(Logger logger, String message, Throwable throwable) {
                if (throwable != null) {
                    logger.debug(message, throwable);
                } else {
                    logger.debug(message);
                }
            }

            @Override
            public boolean isActiveFor(Logger logger) {
                return logger.isDebugEnabled();
            }
        }, INFO {
            @Override
            void log(Logger logger, String message, Throwable throwable) {
                if (throwable != null) {
                    logger.info(message, throwable);
                } else {
                    logger.info(message);
                }
            }

            @Override
            public boolean isActiveFor(Logger logger) {
                return logger.isInfoEnabled();
            }
        }, WARN {
            @Override
            void log(Logger logger, String message, Throwable throwable) {
                if (throwable != null) {
                    logger.warn(message, throwable);
                } else {
                    logger.warn(message);
                }
            }

            @Override
            public boolean isActiveFor(Logger logger) {
                return logger.isWarnEnabled();
            }
        }, ERROR {
            @Override
            void log(Logger logger, String message, Throwable throwable) {
                if (throwable != null) {
                    logger.error(message, throwable);
                } else {
                    logger.error(message);
                }
            }

            @Override
            public boolean isActiveFor(Logger logger) {
                return logger.isErrorEnabled();
            }
        };

        abstract void log(Logger logger, String message, Throwable throwable);

        public abstract boolean isActiveFor(Logger logger);
    }
}




© 2015 - 2026 Weber Informatics LLC | Privacy Policy