【问题标题】:What is Logging, and how is Apache Commons logging used?什么是日志记录,以及如何使用 Apache Commons 日志记录?
【发布时间】:2011-03-03 09:32:58
【问题描述】:

Web 应用程序服务器希望记录哪些信息,为什么?

据我了解

org.apache.commons.logging.Log

是对其他Logging类提供的功能进行抽象的接口,同样适用于接口LogFactory。

我试图理解的代码有 -

Log auditLogger = LogFactory.getLog(someString);

String someString 是如何用于标识要生成的 LogFactory 的?如何查看正在使用的 Log 和 LogFactory 类的实现?

【问题讨论】:

    标签: java logging interface apache-commons apache-commons-logging


    【解决方案1】:

    字符串是任意的identifier,我们可以使用它重定向过滤日志输出。一种常见的方法是使用类名,例如,

    Log auditLogger = LogFactory.getLog(MyCurrentClass.class);
    

    正如你所说,commons-logging 是一个外观,如果没有提供其他日志库,则默认为 java.util.logging。 我建议在 classpath 中放置一个日志实现,例如 log4jlogbackslf4j

    假设您将例如log4j 放在那里,您可以使用配置文件log4j.xml 控制日志输出,例如:

    <?xml version="1.0" encoding="UTF-8"?>
    <log4j:configuration>
    
        <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
            ..... 
        </appender>
    
    
        <!-- Send debug information from "com.company.MyCurrentClass" to CONSOLE -->
        <logger name="com.company.MyCurrentClass">
            <level value="DEBUG"/>
            <appender-ref ref="CONSOLE"/>
        </logger>
    
    </log4j:configuration>
    

    【讨论】:

      【解决方案2】:

      someString 只是记录器名称(如果需要,也可以是别名,通常是类名)。 您无需了解LogLogFactory 的实现,只需配置和使用即可。

      Web 应用程序应该记录的信息是该应用程序的开发人员想要知道的(例如异常处理、某些状态流、其他有用信息)

      【讨论】:

        【解决方案3】:

        我们在 Web 层(Struts2 Actions 或 JSF Backing Beans)以及我们的 EJB 3 Session Beans 中使用类似于 Log logger = LogFactory.getLog(MyCurrentClass.class); 的代码。

        然后,我们主要记录错误和警告,但也记录有用的信息(例如计划作业的开始和结束、用户登录、某些用户操作以查看他们在错误发生之前正在做什么等)。

        您可能还想使用logger.debug("Debug message") 在日志框架启用接受这些信息时记录更多信息(在 Log4J 中,您可以将阈值设置为 DEBUG 或更低,这可以在运行时完成)。如果首先需要提取/组装调试消息等,这对于您不需要它的常见情况来说可能过于昂贵,您可以先检查logger.isDebugEnabled()

        通常,每个记录器都会获得一个名称,您可以将其作为字符串或类提供给 LogFactory.getLog() 方法。这使您可以为每个记录器或组设置不同的设置。

        例如,如果您有一个用于my.package.MyClass 的记录器并使用带有包org.library.* 的库,您可以配置记录框架以启用my.package.* 的调试消息,但不启用org.library.* 的调试消息。通过这种方式,您可以过滤消息以获得更小/更易读的日志。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-04
          • 2017-09-07
          • 2017-04-15
          • 1970-01-01
          • 1970-01-01
          • 2012-07-20
          相关资源
          最近更新 更多