我正在将代码从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
,addAppender
和setAdditivity
方法。
答案 0 :(得分:1)
AFAIK,如果你想成为“纯SLF4J”,你不能(也不应该)通过代码配置你的记录器。配置详细信息是特定于实现的。 (参考:slf4 FAQ)
如果您确定要使用Logback,则有两种选择:
在代码之外使用特定于Logback的配置文件;或者,
当您获得Logger(来自LoggerFactory)时,您知道它是 将成为Logback实现。所以,把它投射到那个,然后 使用它支持的额外方法,超出界面 SLF4J。
第一个(配置文件)更容易更改。我建议去那条路。
如果你想进入第二条路线,你可以改变导入,这样我们就可以从Logback处理实际的类,而不是来自SLF4J的接口。此外,您可以在LoggerFactory返回Logger时添加强制转换。
完成此操作后,您会发现Logger类现在支持您正在寻找的setLevel()和setAdditive()方法。有关详细信息,请参阅Logback javadocs。