Tomcat日志类型概述
Tomcat的日志主要分为两类:服务器运行日志(记录Tomcat自身启动、停止及全局事件)和访问日志(记录客户端对Web应用的请求详情)。其中,服务器运行日志又细分为catalina(核心运行日志)、localhost(应用初始化异常)、manager(管理接口日志)、host-manager(虚拟主机管理日志)等类别,均通过conf/logging.properties配置;访问日志则通过conf/server.xml中的AccessLogValve配置。
一、服务器运行日志格式(logging.properties配置)
服务器运行日志的格式通过logging.properties中的formatter属性定义,常用格式化类为java.util.logging.SimpleFormatter(默认)或org.apache.juli.OneLineFormatter(单行输出)。自定义格式需使用占位符,以下为核心占位符说明及示例:
%1$tY(4位年份)、%1$tm(2位月份)、%1$td(2位日期)、%1$tH(24小时制小时)、%1$tM(分钟)、%1$tS(秒);%4$s(如INFO、ERROR,左对齐占4位);%5$s(线程名称);%2$s(日志记录器名称,通常为类全路径);%6$s(实际日志内容);%n(适配操作系统)。默认格式示例(java.util.logging.SimpleFormatter):
2025-09-28 10:30:45 INFO com.example.web.MyController - User login successful
自定义配置示例(单行输出,包含时间、级别、类名、消息):
修改logging.properties中的java.util.logging.ConsoleHandler.formatter:
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.SimpleFormatter.format = %1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS %4$s %2$s %5$s - %6$s%n
效果:2025-09-28 10:30:45 INFO com.example.web.MyController - User login successful。
二、访问日志格式(server.xml配置)
访问日志通过server.xml中的AccessLogValve配置,用于记录客户端请求的详细信息(如IP、方法、URL、状态码等)。其格式由pattern属性定义,支持预定义别名和自定义项:
common:基础格式(%h %l %u %t "%r" %s %b),包含远程主机、用户、时间、请求行、状态码、发送字节数;combined:扩展格式(common+%{Referer}i+%{User-Agent}i),增加了Referer(来源页面)和User-Agent(客户端浏览器信息)。%h(远程主机IP)、%l(远程用户名,始终为-)、%u(认证用户,无则为-)、%t(时间,Common Log Format格式)、%r(请求行,如GET /index.html HTTP/1.1)、%s(HTTP状态码)、%b(发送字节数,不含HTTP头,0则显示-)、%T(处理时间,秒)、%D(处理时间,毫秒);%{HeaderName}i(如%{User-Agent}i获取客户端浏览器信息);%{CookieName}c(如%{JSESSIONID}c获取会话ID);%{AttributeName}s(如%{userId}s获取Session中的用户ID);%{AttributeName}r(如%{requestId}r获取ServletRequest中的属性)。默认配置示例(common格式):
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log."
suffix=".txt"
pattern="common"
resolveHosts="false"/>
效果:192.168.1.100 - - [28/Sep/2025:10:30:45 +0800] "GET /index.html HTTP/1.1" 200 1024
自定义配置示例(包含IP、时间、方法、URL、状态码、处理时间、Referer、User-Agent、手机号):
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="access_log."
suffix=".log"
pattern="%h %t %m %U %s %D %{Referer}i %{User-Agent}i MSISDN=%{x-up-calling-line-id}i"
resolveHosts="false"/>
效果:192.168.1.100 [28/Sep/2025:10:30:45 +0800] GET /login.jsp 200 500 "https://example.com/home" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" MSISDN=13800138000。
三、日志格式配置注意事项
%{User-Agent}i),频繁记录大字段会增加I/O负载;logging.properties中的FileHandler.limit(文件大小,如50000字节)和FileHandler.count(保留文件数,如10个)配置日志滚动,防止单个日志文件过大;./bin/shutdown.sh && ./bin/startup.sh)使配置生效。