1. 程式人生 > >《Tomcat日誌系統詳解》

《Tomcat日誌系統詳解》

綜合:Tomcat下相關的日誌檔案

Cataline引擎的日誌檔案,檔名catalina.日期.log 
Tomcat下內部程式碼丟出的日誌,檔名localhost.日期.log(jsp頁面內部錯誤的異常,org.apache.jasper.runtime.HttpJspBase.service類丟出的,日誌資訊就在該檔案!) 
Tomcat下預設manager應用日誌,檔名manager.日期.log 
控制檯輸出的日誌,Linux下預設重定向到catalina.out 
Access日誌(Servlet.xml配置) 
應用程式通過log4j.properties:${catalina.base
}/logs/probe.log重定向過來的日誌 JULI:org.apache.juli.FileHandler對應的日誌檔名:{prefix}.{date}.{suffix} 預設juli.日期.log Tomcat下Web應用程式可以使用如下3種日誌: 使用JDK提供的日誌java.util.logging. 使用Java Servlets規範中定義的日誌javax.servlet.ServletContext.log(...) 使用其他日誌框架,如log4j 不同Web應用程式下使用的Servlet日誌(或者日誌框架提供的日誌)是相互獨立的(這與Tomcat的class loader有關,參考Class Loader HOW-TO )。如果Web應用程式使用的是java.util
.logging日誌,那麼它們並不相互獨立,這是因為java.util.logging是由JAVA系統中的Bootstrap ClassLoader來載入的,因此它在各Web應用程式之間是共享的! Tomcat使用的日誌配置檔案:$CATALINA_BASE/conf/logging.properties Tomcat日誌管理類預設使用的是JULI:LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" Java的stdout and stderr會被重定向到$CATALINA_BASE/logs/catalina.out
,同時:下面2種類型的錯誤資訊,也會被記錄在這裡 Uncaught exceptions printed by java.lang.ThreadGroup.uncaughtException(.. Thread dumps, if you requested them via a system signal Access訪問日誌:它與一般的日誌有關係但不太一樣,它在Servlet.xml中的Context或者 Host或者Engine中配置。在上述的配置節中增加下述的Value就行,具體參考:The Valve Component Xml程式碼 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".logs" pattern="common" resolveHosts="false"/> Tomcat預設使用JULI日誌系統(可以參考官網文件修改成使用log4j),它是對預設的JDK日誌java.util.logging進行一定的封裝,和標準JDK日誌支援相同的配置。最大的不同是針對不同的classloader,可以使用不同的配置檔案,使得tomcat下不同的Web應用程式可以使用各自獨立的日誌檔案。也就是說,Tomcat下的預設日誌有如下2個層次: 全域性配置檔案. That is usually done in the ${catalina.base}/conf/logging.properties file. The file is specified by the java.util.logging.config.file System property which is set by the startup scripts. If it is not readable or is not configured, the default is to use the ${java.home}/lib/logging.properties file in the JRE. Web應用程式中使用WEB-INF/classes/logging.properties 預設的JRE中的logging.properties會把日誌輸出到System.err(ConsoleHandler)中,而預設的Tomcat下的配置檔案conf/logging.properties會增加多個FileHandlers把日誌輸出到不同的檔案。 JULI日誌的擴充套件配置: 字首,使得對於一個class可以由多個handler進行處理:A prefix may be added to handler names, so that multiple handlers of a single class may be instantiated. A prefix is a String which starts with a digit, and ends with '.'. For example, 22foobar. is a valid prefix. 引用系統變數,比如使用${catalina.base}/logs/prj.log直接把專案prj的日誌定位到tomcat下logs目錄:System property replacement is performed for property values which contain ${systemPropertyName}. As in Java 6.0, loggers can define a list of handlers using the loggerName.handlers property. By default, loggers will not delegate to their parent if they have associated handlers. This may be changed per logger using the loggerName.useParentHandlers property, which accepts a boolean value. 根looger:The root logger can define its set of handlers using the .handlers property. Tomcat JULI日誌格式:使用Engine,Host, Context來定義日誌,Engine一般是Catalina。 org.apache.catalina.core.ContainerBase.[${engine}].[${host}].[${context}] Tomcat下預設的的配置檔案${catalina.base}/conf/logging.properties: Java程式碼 handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, 3manager.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler .handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler ############################################################ # Handler specific properties. # Describes specific configuration info for Handlers. ############################################################ # Cataline引擎的日誌檔案,檔名catalina.日期.log 1catalina.org.apache.juli.FileHandler.level = FINE 1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 1catalina.org.apache.juli.FileHandler.prefix = catalina. # Tomcat下內部程式碼丟出的日誌,檔名localhost.日期.log 2localhost.org.apache.juli.FileHandler.level = FINE 2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 2localhost.org.apache.juli.FileHandler.prefix = localhost. # Tomcat下預設manager應用日誌,檔名manager.日期.log 3manager.org.apache.juli.FileHandler.level = FINE 3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 3manager.org.apache.juli.FileHandler.prefix = manager. # 控制檯輸出的日誌,Linux下預設重定向到catalina.out java.util.logging.ConsoleHandler.level = FINE java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter ############################################################ # Facility specific properties. # Provides extra control for each logger. ############################################################ org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler # Wen應用程式/manager的日誌 org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.FileHandler # Wen應用程式/host-manager的日誌 org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.FileHandler # For example, set the com.xyz.foo logger to only log SEVERE # messages: #org.apache.catalina.startup.ContextConfig.level = FINE #org.apache.catalina.startup.HostConfig.level = FINE #org.apache.catalina.session.ManagerBase.level = FINE #org.apache.catalina.core.AprLifecycleListener.level=FINE