1

我正在将代码从 Log4J 迁移到由 logback 1.0.13 支持的 slf4j。

如何将以下代码翻译为 slf4j ?

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    // ...  

    ConsoleAppender stderr = new ConsoleAppender();
    stderr.setTarget(ConsoleAppender.SYSTEM_ERR);
    stderr.setLayout(layout);
    stderr.addFilter(new CurrentThreadLogFilter());
    stderr.setThreshold(Level.INFO);
    stderr.activateOptions();

    Logger loggerRECORD = getLoggerRECORD();
    loggerRECORD.setLevel(Level.ALL);
    loggerRECORD.setAdditivity(false);
    loggerRECORD.addAppender(stderr);

    Logger root = LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
    root.setLevel(Level.WARN);
    root.addAppender(stderr);

    // ...

    private Logger getLoggerRECORD() {
         return LoggerFactory.getLogger("com.company.MyClass");
    }

我不知道用什么来代替setLevel,addAppendersetAdditivity方法。

4

1 回答 1

1

AFAIK,如果你想成为“纯 SLF4J”,你不能(也不应该)通过代码配置你的记录器。配置细节是特定于实现的。(参考:slf4 常见问题解答

如果你确定要使用 Logback,你有两个选择:

  1. 在代码之外使用特定于 Logback 的配置文件;或者,

  2. 当您获得 Logger(来自 LoggerFactory)时,您知道它将是一个 Logback 实现。所以,把它转换成那个,然后使用它支持的额外方法,在 SLF4J 的接口之上。

第一个(配置文件)更容易更改。我建议走那条路。

如果您想走第二条路线,您可以更改导入,以便我们处理来自 Logback 的实际类,而不是来自 SLF4J 的接口。此外,您可以在 LoggerFactory 返回 Logger 时添加强制转换。

完成此操作后,您会发现 Logger 类现在支持您正在寻找的 setLevel() 和 setAdditive() 方法。有关更多信息,请参阅Logback javadocs

于 2013-09-06T13:17:27.867 回答