什么是日志记录,以及Apache Commons logging如何使用?

3

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

据我所知,


(以下为需要翻译的内容,请继续翻译)
org.apache.commons.logging.Log

Log是一个接口,它抽象了其他Logging类提供的功能,LogFactory接口也是如此。

我正在尝试理解的代码如下:

Log auditLogger = LogFactory.getLog(someString);

如何使用字符串 someString 来标识生成哪个 LogFactory?我该如何查看 Log 和 LogFactory 类的实现?

3个回答

5
该字符串是一个任意的标识符,我们可以使用它来重定向或过滤日志输出。一种常见的方法是使用类名,例如:
Log auditLogger = LogFactory.getLog(MyCurrentClass.class);

正如您所说,commons-logging是一个门面,如果没有提供其他日志库,则默认使用java.util.logging。我建议将日志实现(例如log4jlogbackslf4j)放在classpath中。假设您将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>

1

someString 只是日志记录器的名称(或别名,通常是类名)。 您不需要了解 LogLogFactory 的实现,只需配置并使用它。

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


1

我们在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.*的调试消息。这样,您就可以过滤消息以获得更小/更易读的日志。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接