Tomcat EmbeddedでTomcatのアクセスログを出力する方法
META-INF/context.xmlを作成してAccessLogValveを適用する
context.xmlを用いて、下のようにAccessLogValveを適用する
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="access" suffix=".log" pattern="%h %l %u %t "%r" %s %b" />
</Context>
Tomcat Embeddedを使ってTomcatを起動する
final Tomcat tomcat = new Tomcat();
tomcat.setPort(8080);
final String docBase = new File("src/main/webapp").getAbsolutePath();
final StandardContext context = (StandardContext) tomcat.addWebapp("/", docBase);
final File additionWebInfClasses = new File("build/classes/main");
final StandardRoot resources = new StandardRoot(context);
resources.addPreResources(
new DirResourceSet(resources, "/WEB-INF/classes",
additionWebInfClasses.getAbsolutePath(), "/"));
context.setResources(resources);
tomcat.start();
tomcat.getServer().await();
結果
カレントディレクトリ配下のtomcat.8080/logs配下にアクセスログが出力されるようになる。
➜ tomcat-embedded-example cat tomcat.8080/logs/access.2017-07-15.log
127.0.0.1 - - [15/Jul/2017:15:36:39 +0900] "GET / HTTP/1.1" 200 89
127.0.0.1 - - [15/Jul/2017:15:36:43 +0900] "GET /hoge HTTP/1.1" 404 1002