Question

We are migrating from commons-logging to slf4j.

We are using org.apache.fop.apps.Driver class to generate PDF files. Now, setLogger() method of Driver class takes org.apache.avalon.framework.logger.Logger as an argument.

CommonsLogger method is provided in org.apache.avalon.framework.logger package that converts commons-logging logger into org.apache.avalon.framework.logger.Logger.

Please find below sample code:

org.apache.fop.apps.Driver driver = new Driver();
driver.setLogger(new CommonsLogger(logger, getClass().getName()));

Now, what shall be the replacement for slf4j logger?

Best, I can guess is using NullLogger() instead of CommonsLogger(). Please tell me if any better solution available.

Was it helpful?

Solution

I suggest you create an implementation of org.apache.avalon.framework.logger.Logger that will take an SLF4J logger. Similar to this one here - https://svn.ametys.org/trunk/runtime/trunk/main/kernel/src/org/ametys/runtime/util/SLF4JLogger.java

OTHER TIPS

Not sure how to map fatal log message type to SL4J's but here is code snippet that works:

import lombok.extern.slf4j.Slf4j;
import org.apache.avalon.framework.logger.Logger;

@Slf4j
public class SL4JLoggerAdapter implements Logger {
    public static final int LEVEL_DEBUG = 0;
    public static final int LEVEL_INFO = 1;
    public static final int LEVEL_WARN = 2;
    public static final int LEVEL_ERROR = 3;
    public static final int LEVEL_FATAL = 4;
    public static final int LEVEL_DISABLED = 5;

    private final int m_logLevel;

    public SL4JLoggerAdapter( final int logLevel )
    {
        m_logLevel = logLevel;
    }

    @Override
    public void debug(String message) {
        log.debug(message);
    }

    @Override
    public void debug(String message, Throwable throwable) {
        log.debug(message, throwable);
    }

    @Override
    public boolean isDebugEnabled() {
        return m_logLevel == LEVEL_DEBUG;
    }

    @Override
    public void info(String message) {
        log.info(message);
    }

    @Override
    public void info(String message, Throwable throwable) {
        log.info(message, throwable);
    }

    @Override
    public boolean isInfoEnabled() {
        return m_logLevel == LEVEL_INFO;
    }

    @Override
    public void warn(String message) {
        log.warn(message);
    }

    @Override
    public void warn(String message, Throwable throwable) {
        log.warn(message, throwable);
    }

    @Override
    public boolean isWarnEnabled() {
        return m_logLevel == LEVEL_WARN;

    }

    @Override
    public void error(String message) {
        log.error(message);
    }

    @Override
    public void error(String message, Throwable throwable) {
        log.error(message, throwable);
    }

    @Override
    public boolean isErrorEnabled() {
        return m_logLevel == LEVEL_ERROR;
    }

    @Override
    public void fatalError(String message) {
        log.trace(message);
    }

    @Override
    public void fatalError(String message, Throwable throwable) {
        log.trace(message, throwable);
    }

    @Override
    public boolean isFatalErrorEnabled() {
        return m_logLevel == LEVEL_FATAL;

    }

    @Override
    public Logger getChildLogger(String name) {
        return this;
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top