3

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

据我了解

org.apache.commons.logging.Log

是一个接口,抽象了其他Logging类提供的功能,同样适用于接口LogFactory。

我试图理解的代码有 -

Log auditLogger = LogFactory.getLog(someString);

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

4

3 回答 3

5

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

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

如您所说,如果没有提供其他日志库,则commons-logging默认为外观。我建议在类路径java.util.logging中放置一个日志实现,例如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>
于 2011-03-03T09:35:45.323 回答
1

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

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

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

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

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

于 2011-03-03T09:50:42.387 回答
1

someString只是记录器名称(或别名,通常是类名)。您无需了解实现,Log只需LogFactory配置和使用它。

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

于 2011-03-03T09:36:41.857 回答