Tomcat的日志主要分为两类:运行日志(记录应用运行状态、错误信息等,如catalina.out)和访问日志(记录HTTP请求详情,如IP、URL、状态码等)。两者需分别配置:
conf/logging.properties文件配置(适用于java.util.logging框架);conf/server.xml文件配置(使用AccessLogValve组件)。运行日志的默认格式由java.util.logging.SimpleFormatter控制,可通过修改logging.properties文件调整格式。
操作步骤:
打开配置文件:
Ubuntu下Tomcat的logging.properties通常位于/etc/tomcatX/conf/(X为版本号,如9、8)或/opt/tomcat/conf/(手动安装路径)。使用文本编辑器(如nano)打开:
sudo nano /etc/tomcat9/conf/logging.properties 方式1:使用SimpleFormatter内置变量(推荐)
找到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),替换为自定义格式。常用变量说明:
%1$tY:4位年份(如2025);%1$tm:2位月份(如09);%1$td:2位日期(如13);%1$tH:24小时制的小时(如14);%4$s:日志级别(如INFO、SEVERE);%2$s:线程名(如http-nio-8080-exec-1);%5$s:类名(如org.apache.catalina.core.StandardEngine);%6$s:日志消息(如“Server startup in 1234 ms”)。示例(包含日期、时间、级别、类名、消息):
java.util.logging.SimpleFormatter.format = %1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS [%4$s] [%2$s] %5$s%n 方式2:自定义Formatter类(高级需求)
若内置变量无法满足需求(如添加固定前缀、格式化堆栈信息),可创建自定义类继承java.util.logging.Formatter接口。
CustomFormatter.java):import java.util.logging.Formatter; import java.util.logging.LogRecord; public class CustomFormatter extends Formatter { @Override public String format(LogRecord record) { return String.format("[%1$tF %1$tT] [%2$s] [%3$s] - %4$s%n", new java.util.Date(record.getMillis()), // 日期时间 record.getLevel().getLocalizedName(), // 日志级别 record.getSourceClassName(), // 类名 record.getMessage() // 消息 ); } } lib目录:javac -cp /usr/share/java/logging-api.jar CustomFormatter.java sudo cp CustomFormatter.class /etc/tomcat9/lib/ logging.properties引用自定义类:java.util.logging.ConsoleHandler.formatter = com.example.CustomFormatter 保存文件并重启Tomcat:
sudo systemctl restart tomcat9 访问日志记录HTTP请求的详细信息(如IP、URL、状态码),通过server.xml中的AccessLogValve组件配置。
操作步骤:
打开server.xml文件:
sudo nano /etc/tomcat9/conf/server.xml 找到<Host>标签(通常位于<Engine>内),添加或修改<Valve>标签:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <!-- 其他配置 --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" resolveHosts="false"/> </Host> pattern参数说明(常用字段):
%h:远程主机IP;%l:远程逻辑用户名(通常为-);%u:远程用户身份验证信息(通常为-);%t:请求时间(如[13/Oct/2025:14:30:00 +0800]);"%r":HTTP请求行(如GET /index.html HTTP/1.1);%s:HTTP状态码(如200、404);%b:响应大小(字节,如-表示无内容)。示例(包含IP、时间、请求、状态码、响应大小):
pattern="%h %t "%r" %s %b" 保存文件并重启Tomcat:
sudo systemctl restart tomcat9 logs/catalina.out或logs/catalina.YYYY-MM-DD.log文件,确认日志格式是否符合预期;logs/localhost_access_log.YYYY-MM-DD.txt文件,确认访问日志格式是否正确。通过以上步骤,可灵活自定义Ubuntu Tomcat的运行日志和访问日志格式,满足监控、排查问题的需求。