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

spring.turbo.util.Logger Maven / Gradle / Ivy

package spring.turbo.util;

import org.slf4j.LoggerFactory;
import org.springframework.lang.Nullable;

import java.io.Serializable;

/**
 * {@link Logger} 的包装工具
 *
 * @author 应卓
 * @see LogLevel
 * @since 1.0.0
 */
public final class Logger implements Serializable {

    @Nullable
    private final org.slf4j.Logger log;

    private final boolean enabled;

    private final LogLevel level;

    public Logger(String loggerName, LogLevel level) {
        Asserts.notNull(level);
        Asserts.notNull(loggerName);

        this.level = level;

        if (level == LogLevel.STDOUT || level == LogLevel.STDERR) {
            this.log = null;
        } else {
            this.log = LoggerFactory.getLogger(loggerName);
        }

        this.enabled = this.checkEnabled();
    }

    public Logger(Class loggerName, LogLevel level) {
        Asserts.notNull(level);
        Asserts.notNull(loggerName);

        this.level = level;

        if (level == LogLevel.STDOUT || level == LogLevel.STDERR) {
            this.log = null;
        } else {
            this.log = LoggerFactory.getLogger(loggerName);
        }

        this.enabled = this.checkEnabled();
    }

    public boolean isEnabled() {
        return enabled;
    }

    private boolean checkEnabled() {
        return switch (level) {
            case STDOUT, STDERR -> true;
            case TRACE -> log != null && log.isTraceEnabled();
            case DEBUG -> log != null && log.isDebugEnabled();
            case INFO -> log != null && log.isInfoEnabled();
            case WARN -> log != null && log.isWarnEnabled();
            case ERROR -> log != null && log.isErrorEnabled();
            default -> false;
        };
    }

    public void log(String format, Object... args) {
        if (isEnabled()) {
            switch (level) {
                case TRACE:
                    trace(format, args);
                    break;
                case DEBUG:
                    debug(format, args);
                    break;
                case INFO:
                    info(format, args);
                    break;
                case WARN:
                    warn(format, args);
                    break;
                case ERROR:
                    error(format, args);
                    break;
                case STDOUT:
                    stdout(format, args);
                    break;
                case STDERR:
                    stderr(format, args);
                default:
                    // nop
            }
        }
    }

    private void stdout(String format, Object... args) {
        System.out.println(StringFormatter.format(format, args));
    }

    private void stderr(String format, Object... args) {
        System.err.println(StringFormatter.format(format, args));
    }

    private void trace(String format, Object... args) {
        if (log != null) {
            log.trace(format, args);
        }
    }

    private void debug(String format, Object... args) {
        if (log != null) {
            log.debug(format, args);
        }
    }

    private void info(String format, Object... args) {
        if (log != null) {
            log.info(format, args);
        }
    }

    private void warn(String format, Object... args) {
        if (log != null) {
            log.warn(format, args);
        }
    }

    private void error(String format, Object... args) {
        if (log != null) {
            log.warn(format, args);
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy