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

elf4j.engine.jpl.Elf4jLogger Maven / Gradle / Ivy

package elf4j.engine.jpl;

import elf4j.engine.NativeLogger;
import lombok.Value;

import java.text.MessageFormat;
import java.util.Objects;
import java.util.ResourceBundle;
import java.util.function.Supplier;

/**
 *
 */
@Value
public class Elf4jLogger implements System.Logger {
    private static final Class SERVICE_INTERFACE_CLASS = Elf4jLogger.class;
    String name;
    NativeLogger nativeLogger;

    private static elf4j.Level translate(Level level) {
        switch (level) {
            case INFO:
                return elf4j.Level.INFO;
            case ERROR:
                return elf4j.Level.ERROR;
            case DEBUG:
                return elf4j.Level.DEBUG;
            case TRACE:
            case ALL:
                return elf4j.Level.TRACE;
            case WARNING:
                return elf4j.Level.WARN;
            case OFF:
                return elf4j.Level.OFF;
            default:
                throw new IllegalArgumentException("Unexpected level: " + level);
        }
    }

    @Override
    public String getName() {
        return this.name;
    }

    @Override
    public boolean isLoggable(Level level) {
        return this.nativeLogger.atLevel(translate(level)).isEnabled();
    }

    @Override
    public void log(Level level, String msg) {
        service(level, null, null, msg);
    }

    @Override
    public void log(Level level, Supplier msgSupplier) {
        service(level, null, null, Objects.requireNonNull(msgSupplier).get());
    }

    @Override
    public void log(Level level, Object obj) {
        service(level, null, null, Objects.toString(Objects.requireNonNull(obj)));
    }

    @Override
    public void log(Level level, String msg, Throwable thrown) {
        service(level, null, thrown, msg);
    }

    @Override
    public void log(Level level, Supplier msgSupplier, Throwable thrown) {
        service(level, null, thrown, Objects.requireNonNull(msgSupplier).get());
    }

    @Override
    public void log(Level level, String format, Object... params) {
        service(level, null, null, format, params);
    }

    @Override
    public void log(Level level, ResourceBundle bundle, String msg, Throwable thrown) {
        service(level, bundle, thrown, msg);
    }

    @Override
    public void log(Level level, ResourceBundle bundle, String format, Object... params) {
        service(level, bundle, null, format, params);
    }

    private void service(Level level, ResourceBundle bundle, Throwable thrown, String message, Object... params) {
        NativeLogger delegateLogger = nativeLogger.atLevel(translate(level));
        if (!delegateLogger.isEnabled()) {
            return;
        }
        String format = bundle == null ? message : bundle.getString(message);
        if (params == null || params.length == 0) {
            delegateLogger.getLogService().log(delegateLogger, SERVICE_INTERFACE_CLASS, thrown, format, null);
            return;
        }
        MessageFormat messageFormat =
                bundle == null ? new MessageFormat(format) : new MessageFormat(format, bundle.getLocale());
        delegateLogger.getLogService()
                .log(delegateLogger, SERVICE_INTERFACE_CLASS, thrown, messageFormat.format(params), null);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy