綜合: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
