【问题标题】:relation between log4j and apache.commons.logginglog4j 和 apache.commons.logging 之间的关系
【发布时间】:2011-12-13 11:52:54
【问题描述】:

谁能告诉我 log4j 和 apache.commons.logging 之间有什么关系?哪个更受欢迎更好?

我已经导入了一个现有的应用程序,他们在其中导入了import org.apache.commons.logging.LogFactory; 并编写了一个名为Log 的单独类,并将其中的一些方法重写为criticalwarninfo

例如

 public static void info(String caller, String toWrite)
   {
      write(caller,toWrite,Log.INFO);
   }

谁能告诉我 log4j 和 apache.commons.logging 是不同的吗??

【问题讨论】:

    标签: logging log4j


    【解决方案1】:

    Apache Commons Logging 是具体实现的抽象。它使用 log4j(如果存在并已配置)。我会在我的代码中使用 Commons 日志记录,并使用 log4j 作为日志记录实现。

    【讨论】:

    • 我会在我的代码中使用 Commons 日志记录并使用 log4j 作为日志记录实现,那么为什么要使用 Apache Commons Logging 呢??
    • 您可以在运行时使用不同的实现或不使用实现,因此您的程序更加灵活。
    • 你能提供更多解释吗??
    【解决方案2】:

    log4j 是一个日志框架,即它提供代码来记录消息。 Commons-logging 是日志框架的抽象层,它本身不记录任何内容。例如,如果我使用公共日志编写代码并将其部署在 JBoss 上,则日志由 log4j 完成,但如果我将其部署在 WebSphere 上,则日志由 WebSphere 自己的日志实现完成。如果我运行与独立应用程序相同的代码,则使用 Java 自己的日志记录

    【讨论】:

      【解决方案3】:

      根据 commons-logging 的 java-doc 文档

      LogFactory 的具体子类,它实现以下算法以动态选择日志实现类来实例化包装器:

      • 使用名为的工厂配置属性 org.apache.commons.logging.Log 来识别请求的 实现类。
      • 使用 org.apache.commons.logging.Log 系统属性来识别 请求的实现类。
      • 如果 Log4J 可用,则返回 org.apache.commons.logging.impl.Log4JLogger。
      • 如果 JDK 1.4 或更高版本可用,则返回 org.apache.commons.logging.impl.Jdk14Logger。
      • 否则,返回一个实例 org.apache.commons.logging.impl.SimpleLog

      因此推断是:

      • commons-logging 更多的是抽象。它也可以在没有 LOG4J 的情况下生存。
      • 如果 Log4j 存在,它会选择它。否则可以使用其他默认值。
      • LOG4J 很受欢迎,因为它可以轻松地将输出重定向到文件,并且可以灵活地配置日志级别。

      JavaDoc URL:https://commons.apache.org/proper/commons-logging/javadocs/api-1.1.3/index.html

      【讨论】:

        猜你喜欢
        • 2010-11-18
        • 1970-01-01
        • 2018-02-08
        • 2020-07-13
        • 2011-09-06
        • 2016-06-10
        • 2013-02-03
        • 2019-07-10
        • 2017-04-04
        相关资源
        最近更新 更多