3

Web应用程序服务器希望记录哪些信息,为什么?什么是日志记录,以及Apache Commons日志记录是如何使用的?

据我了解

org.apache.commons.logging.Log 

是抽象其他记录类提供的功能的接口,同样适用于界面的LogFactory。

代码我想明白了 -

Log auditLogger = LogFactory.getLog(someString); 

如何使用字符串someString以确定哪些的LogFactory产生?我如何看到正在使用的Log和LogFactory类的实现?

回答

5

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

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

至于你说,commons-logging是缺省为java.util.logging如果没有其他日志库供给的外观。 我建议在类路径中加入日志记录实现,例如log4j,logbackslf4j

假设你把例如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

我们在我们的网络层使用类似于Log logger = LogFactory.getLog(MyCurrentClass.class);代码(Struts2 Actions或JSF Backing Bean)以及我们的EJB 3 Session Beans。我们然后主要记录错误和警告,但是也使用有用的信息(例如计划作业的开始和结束,用户登录,某些用户操作以查看错误发生之前他们正在做什么等)。

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

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

举例来说,如果你有一个my.package.MyClass记录仪和使用库包org.library.*你可以为org.library.*配置日志框架启用my.package.*调试消息,但没有。通过这种方式,您可以过滤消息以获得更小/更好的可读日志。