tomcat日志系统&access日志&相关日志文件

参考:LogginginTomcat

综合: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.
  • 使用JavaServlets规范中定义的日志javax.servlet.ServletContext.log(...)
  • 使用其他日志框架,如log4j

不同Web应用程序下使用的Servlet日志(或者日志框架提供的日志)是相互独立的(这与Tomcat的classloader有关,参考ClassLoaderHOW-TO

)。如果Web应用程序使用的是java.util.logging日志,那么它们并不相互独立,这是因为java.util.logging是由JAVA系统中的BootstrapClassLoader来加载的,因此它在各Web应用程序之间是共享的!

Tomcat使用的日志配置文件:$CATALINA_BASE/conf/logging.properties

Tomcat日志管理类默认使用的是JULI:LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"

Java的stdoutandstderr会被重定向到$CATALINA_BASE/logs/catalina.out,同时:下面2种类型的错误信息,也会被记录在这里

  • Uncaughtexceptionsprintedbyjava.lang.ThreadGroup.uncaughtException(..
  • Threaddumps,ifyourequestedthemviaasystemsignal

Access访问日志:它与一般的日志有关系但不太一样,它在Servlet.xml中的Context或者Host或者Engine中配置。在上述的配置节中增加下述的Value就行,具体参考:TheValveComponent

<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个层次:

  • 全局配置文件.Thatisusuallydoneinthe${catalina.base}/conf/logging.propertiesfile.Thefileisspecifiedbythejava.util.logging.config.fileSystempropertywhichissetbythestartupscripts.Ifitisnotreadableorisnotconfigured,thedefaultistousethe${java.home}/lib/logging.propertiesfileintheJRE.
  • Web应用程序中使用WEB-INF/classes/logging.properties
  • 默认的JRE中的logging.properties会把日志输出到System.err(ConsoleHandler)中,而默认的Tomcat下的配置文件conf/logging.properties会增加多个FileHandlers把日志输出到不同的文件。

JULI日志的扩展配置:

  • 前缀,使得对于一个class可以由多个handler进行处理:Aprefixmaybeaddedtohandlernames,sothatmultiplehandlersofasingleclassmaybeinstantiated.AprefixisaStringwhichstartswithadigit,andendswith'.'.Forexample,22foobar.isavalidprefix.
  • 引用系统变量,比如使用${catalina.base}/logs/prj.log直接把项目prj的日志定位到tomcat下logs目录:Systempropertyreplacementisperformedforpropertyvalueswhichcontain${systemPropertyName}.
  • AsinJava6.0,loggerscandefinealistofhandlersusingtheloggerName.handlersproperty.
  • Bydefault,loggerswillnotdelegatetotheirparentiftheyhaveassociatedhandlers.ThismaybechangedperloggerusingtheloggerName.useParentHandlersproperty,whichacceptsabooleanvalue.
  • 根looger:Therootloggercandefineitssetofhandlersusingthe.handlersproperty.

TomcatJULI日志格式:使用Engine,Host,Context来定义日志,Engine一般是Catalina。

org.apache.catalina.core.ContainerBase.[${engine}].[${host}].[${context}]

Tomcat下默认的的配置文件${catalina.base}/conf/logging.properties:

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

相关推荐