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.*調試消息,但沒有。通過這種方式,您可以過濾消息以獲得更小/更好的可讀日誌。