歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux管理 >> Linux配置 >> Tomcat日志處理

Tomcat日志處理

日期:2017/2/27 14:59:41   编辑:Linux配置
本文主要講的是 Tomcat 自己本身對日志的處理,而非每個 webapp 的日志配置(現在 webapp 一般會獨立配置日志)。

內容基本上來自官方文檔:http://tomcat.apache.org/tomcat-6.0-doc/logging.html

一、Webapp 記錄日志的方法

Tomcat 中的 webapp 有三種方法記錄日志:

  • 使用 java.util.logging
  • 使用 Servlet 標准中的日志記錄方法 javax.servlet.ServletContext.log(...)
  • 使用任意其它的日志框架(例如 Log4j)

一般來說,每個 webapp 使用的日志框架都是獨立的,不會影響其他 webapp。但如果用的是 Java 原生的 java.util.logging,由於它是通過系統加載的,因此各個 webapp 之間會共享同一個日志配置。

二、什麼是 JULI

Tomcat 默認會使用 java.util.logging (JUL) 日志框架,但重寫了一些實現,以解決一個 JVM 中 JUL 只能使用一個配置文件的問題,滿足多個 webapp 獨立配置日志的需求。這個實現就叫 JULI (['d?u:li])。

全局日志配置

  • 默認使用 ${catalina.base}/conf/logging.properties,這個路徑在 Tomcat 啟動腳本中通過 java.util.logging.config.file 系統屬性指定
  • 如果上述默認配置文件不可用(不存在或無權限讀取),則使用 JRE 中的 ${java.home}/lib/logging.properties

webapp 獨立日志配置

  • JULI 支持每個 ClassLoader (也就是每個 webapp) 使用自己的日志配置,配置文件位於 {webapp]/WEB-INF/classes/logging.properties

控制台

  • Linux 上運行 Tomcat 時,控制台的輸出 (System.err/out) 同時會被保存到文件 catalina.out 中,這個名稱是通過運行腳本指定的
  • 在 Windows 上,如果以服務的形式運行 Tomcat,也會將控制台輸出保存到文件(文檔沒說文件名是什麼。。。),如果不以服務的形式運行,則不會保存控制台輸出

三、JULI 對 JUL 的擴展

  • 配置文件中能通過 ${systemPropertyName} 的格式使用系統屬性
  • Handler
    • JUL 中,handler 名稱即為類的完整限定名,一個類只能創建一個 handler。而 JULI 的 handler 名稱可以在類的完整限定名之前加前綴,該前綴以數字開頭,以 . 結尾(注意中間不能出現 .),例如 5portallocal.
    • JULI 定義一些 handler 類,例如 org.apache.juli.FileHandler,支持緩沖。
  • Logger
    • 每個 logger 可以指定多個 handler(Java 6 的 JUL 開始支持)
    • root logger 可以使用 .handler 指定 handler:
      org.apache.catalina.core.ContainerBase.[Catalina].[localhost].useParentHandlers = true
    • 注意,如果一個 logger 已經指定了 handler,則默認不會將日志傳遞給上級 logger,但可以通過 useParentHandlers 修
      org.apache.catalina.core.ContainerBase.[Catalina].[localhost].useParentHandlers = true

四、生產環境中的注意事項

  • root logger 默認配置了 FileHandler 和 ConsoleHandler,而控制台輸出一般又被保存到文件中,導致相同的日志被保存了2份,可以考慮將 ConsoleHandler 從 root logger 中去除。
  • 刪除沒必要的 handler,例如 host-manager 的。
  • handler 默認使用系統默認編碼,可以考慮顯式指定編碼。
  • 考慮配置 access log,可參考 http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html#Access_Log_Valve

五、其它

Tomcat 也能配置為使用 Log4j 代替 JULI 來處理日志,詳見 http://tomcat.apache.org/tomcat-6.0-doc/logging.html#Using_Log4j

Copyright © Linux教程網 All Rights Reserved