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的运行日志和访问日志格式,满足监控、排查问题的需求。