【问题标题】:Understanding Logback and Slf4j了解 Logback 和 Slf4j
【发布时间】:2016-04-20 06:35:42
【问题描述】:

我正在尝试了解所有不同的日志记录工具(log4j、slf4j、logback、jcl 等)以及它们的作用。

我知道 slf4j 是不同日志工具的外观,可以轻松在任何日志工具之间切换。但是当我谈到 logback 的话题时,我感到很困惑。我知道 logback 是 log4j 的继承者,并且从 this post 开始,它使用了“本地实现”的词;这到底是什么意思。据我了解,logback 与 slf4j 是一回事.....那么它也是门面吗?我对 logback 作为后端日志记录工具和与 slf4j 相同的面孔的描述不一。

我尝试了一个小型测试项目来了解它的工作原理。所以在我的maven pom中我放了:

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.3</version>
</dependency>

然后在我输入的代码中:

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

public class Foo {
    /** The Constant LOGGER. */
    private static final Logger LOGGER = LoggerFactory.getLogger(Foo.class);
}

那么这个实现是否意味着 slf4j 是 logback 的外观,而 logback 是与 log4j 和 jcl 相同的后端日志记录工具?

【问题讨论】:

    标签: java logging log4j slf4j


    【解决方案1】:

    这意味着SLF4J的接口中定义的所有方法都直接在Logback的类中实现。没有额外的层可以将SLF4J 调用“转换”为实际的日志记录实现。

    当您查看实现它的org.slf4j.Logger 接口和ch.qos.logback.classic.Logger 类时,可以很容易地看到这一点。它像手套一样合身。

    【讨论】:

    • 哦,我明白了,所以当我登录我的程序时,我将使用 slf4j 的方法,但实现包含在 logback 中
    • 没错。它也使其效率更高,因为无需将 slf4j 方法转换为 log4j(或其他非本地实现)方法。
    【解决方案2】:

    简短的回答是Logback 不是门面,而是类似于(但优于)log4j、java.util.logging、jcl 等的后端实现。请继续阅读以下详细答案:

    下面的解释为@Kamayan 在他的回答中解释的内容添加了更多细节。逐句分解你的问题陈述。

    我知道 slf4j 是不同日志工具的外观,可以轻松地在任何日志工具之间切换。

    简单来说,这意味着您总是创建您的记录器以及调用 SLF4J API 的日志方法,而不用担心实际实现的 API,如 log4j 或 logback 等。实际的实现是仅在日志记录的行为由日志记录实现确定的运行时显示。用一个简单的代码 sn-p 映射它:

    private static final Logger LOGGER = LoggerFactory.getLogger(Foo.class);
    LOGGER.debug("A debug log");
    

    这里 Logger 是 org.slf4j.Logger,LoggerFactory 是 org.slf4j.LoggerFactory。

    我知道 logback 是 log4j 的继承者,并且来自 this post 它 使用“本地实现”一词;这到底是什么意思。

    logback-classic 中的

    Logger 类实现 SLF4J APILogger 类中存在的所有方法(其中log4j、jcl 等不是这种情况。)这意味着在调用具有 logback-classic 作为底层实现的 SLF4J 记录器时,您会产生零开销。

    据我了解,logback 和 slf4j 是一回事.....所以它也是门面吗?

    不,它不是门面。 一个更好的说法是它比它的对等门面更接近 slf4j 门面 - log4J、jcl 等。

    这是一个来自 logback 项目的very nice article,用于比较 logback 和其他日志记录实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-05
      • 2012-05-15
      • 2016-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      相关资源
      最近更新 更多