1

我们正在从 commons-logging 迁移到 slf4j。

我们正在使用 org.apache.fop.apps.Driver 类来生成 PDF 文件。现在,Driver 类的 setLogger() 方法将 org.apache.avalon.framework.logger.Logger 作为参数。

CommonsLogger 方法在 org.apache.avalon.framework.logger 包中提供,将 commons-logging logger 转换为 org.apache.avalon.framework.logger.Logger。

请在下面找到示例代码:

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

现在,什么是 slf4j 记录器的替代品?

最好的,我猜是使用 NullLogger() 而不是 CommonsLogger()。请告诉我是否有更好的解决方案。

4

2 回答 2

0

我建议您创建一个 org.apache.avalon.framework.logger.Logger 的实现,它将采用 SLF4J 记录器。与此处类似 - https://svn.ametys.org/trunk/runtime/trunk/main/kernel/src/org/ametys/runtime/util/SLF4JLogger.java

于 2012-12-21T10:08:09.457 回答
0

不确定如何将fatal日志消息类型映射到 SL4J,但这里是有效的代码片段:

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;
    }
}
于 2019-12-17T13:20:03.300 回答