Tomcat 日志分为两类, 访问日志 记录访问时间、IP 等信息, 运行日志 记录异常错误等信息。

# 运行日志

在 Tomcat 中,常见的五类运行日志是:
Catalina 日志:Catalina 日志是 Tomcat 服务器的核心组件,用于记录 Tomcat 的启动、关闭以及关键事件的详细信息。它包含了 Tomcat 的系统级别日志,如类加载、Servlet 初始化、请求处理等。Catalina 日志对于故障排除和性能分析非常有用。
Localhost 日志:Localhost 日志记录了与 Tomcat 的默认虚拟主机(localhost)相关的请求和活动。它包含了来自 localhost 虚拟主机的访问日志,可以用于跟踪和分析对 Tomcat 服务器的本地请求。
Manager 日志:Manager 日志记录了 Tomcat 管理应用程序(manager web 应用)的活动。当您使用 Tomcat 的管理应用程序进行部署、启动、停止和重新加载 Web 应用程序时,Manager 日志将记录相关的操作和事件。
Admin 日志:Admin 日志是 Tomcat 的管理界面(Tomcat Admin Console)的日志,用于记录与管理界面相关的活动和事件。它包含了对 Tomcat 管理界面的访问日志以及管理操作的日志记录。
Host-manager 日志:Host-manager 日志记录了 Tomcat 的虚拟主机管理应用程序(host-manager web 应用)的活动。当您使用虚拟主机管理应用程序进行虚拟主机的创建、删除和修改时,Host-manager 日志将记录相关的操作和事件。
配置文件路径: Tomcat安装目录/conf/logging.properties

#可配置项 (5 类日志):catalina、localhost、manager、admin、host-manager
handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler,
3manager.org.apache.juli.FileHandler, 4host-manager.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
# 日志输出为输出到文件和输出到控制台
.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
# 日志输出级别:SEVERE (最高级别) > WARNING > INFO > CONFIG > FINE > FINER (精心) > FINEST (所有内容,最低级别)
# 配置文件使 catalina 日志输出级别为 FINE
1catalina.org.apache.juli.FileHandler.level = FINE
#catalina 文件输出位置
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
#catalina 日志前缀为 catalina
1catalina.org.apache.juli.FileHandler.prefix = catalina.
# 配置文件使 localhost 日志输出级别为 FINE
2localhost.org.apache.juli.FileHandler.level = FINE
#localhost 文件输出位置
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
#localhost 日志前缀为 localhost
2localhost.org.apache.juli.FileHandler.prefix = localhost.
# 配置文件使 manager 日志输出级别为 FINE
3manager.org.apache.juli.FileHandler.level = FINE
#manager 文件输出位置
3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
#manager 日志前缀为 manager
3manager.org.apache.juli.FileHandler.prefix = manager.
# 配置文件使 host-manager 日志输出级别为 FINE
4host-manager.org.apache.juli.FileHandler.level = FINE
#host-manager 文件输出位置
4host-manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
#host-manager 日志前缀为 host-manager
4host-manager.org.apache.juli.FileHandler.prefix = host-manager.
# 配置文件使控制台日志输出级别为 FINE
java.util.logging.ConsoleHandler.level = FINE
# 控制台日志输出格式
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
#localhost 日志文件输出级别为 INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
#localhost 日志文件输出处理类 2localhost.org.apache.juli.FileHandler
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler
#manager 日志文件输出级别为 INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
#manager 日志文件输出处理类 3manager.org.apache.juli.FileHandler
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.FileHandler
#host-manager 日志文件输出级别为 INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO
#host-manager 日志文件输出处理类 4host-manager.org.apache.juli.FileHandler
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.FileHandler

# 访问日志

配置文件路径: Tomcat安装目录/conf/server.xml

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
       prefix="localhost_access_log" suffix=".txt"
       pattern="%h %l %u %t "%r" %s %b"
       resolveHosts="true" />

参数说明如下:
className :官方说明必须按照默认配置不可更改。
directory :日志文件位置。
prefix :日志文件前缀。
suffix :日志文件后缀。
resolveHosts :用于控制是否解析远程主机的 IP 地址为主机名。当设置为 true 时,Tomcat 会尝试将远程主机的 IP 地址解析为主机名,并将主机名记录在访问日志中。当设置为 false 时,Tomcat 将直接记录远程主机的 IP 地址。默认值是 false,即默认情况下不会进行主机名解析。
pattern :日志模式参数,说明见下表。

参数描述
%a远程 IP 地址
%A本地 IP 地址
%b响应的字节数(不包括响应头)
%B响应的字节数(包括响应头)
%h远程主机名
%H请求的协议
%l远程逻辑用户名(通常不可用)
%m请求的 HTTP 方法
%p本地端口号
%q请求的查询字符串
%r完整的 HTTP 请求行
%s响应的 HTTP 状态码
%t请求的时间戳
%u远程用户身份验证(如果启用)
%U请求的 URL 路径
%v本地服务器名

这些参数可以根据需要进行组合和定制,以满足特定的日志记录需求。例如,以下是一个常见的 pattern 参数示例:

"%h %l %u %t \"%r\" %s %b"

这将记录远程主机名、远程逻辑用户名、远程用户身份验证、请求的时间戳、完整的 HTTP 请求行、响应的 HTTP 状态码和响应的字节数(不包括响应头)。

# 日志分割

切割日志的目的是限制单个日志文件的大小,以避免文件过大对系统性能和存储空间的影响。Tomcat 本身并没有内置的日志切割功能,但可以使用第三方的日志切割工具来实现。一些常见的工具包括 Log4jLogbackCronolog 等。

更新于