こんにちは、うさぎが好きなエンジニアです。
今回はTomcatのログファイル名の変更方法についての備忘録です。
【やりたいこと】
・tomcatの各種ログファイル名から日付(YYYY-MM-DD)を取り除き、下記のようにしたい
catalina.out
catalina.log
localhost.log
localhost_access_log.txt
【目的】
下記をやりたいんだけどログファイルの日付が邪魔なんだよな・・・というご経験があるかもしれません。
・logrotateを使ったローテーション
・fluentd(td-agent)でのログ転送
tomcatのログファイル名は、デフォルトでは下記のようになっています。
catalina.out
catalina.YYYY-MM-DD.log
localhost.YYYY-MM-DD.log
localhost_access_log.YYYY-MM-DD.txt
この他にmanager.YYYY-MM-DD.log、host-manager.YYYY-MM-DD.logがありますが、こちらは基本的に不要なので出力を無効化することをお勧めいたします。
今回の目的は、設定を変更することでログファイル名から日付(YYYY-MM-DD)を排除することです。
catalina.YYYY-MM-DD.log ⇒ catalina.log
localhost.YYYY-MM-DD.log ⇒ localhost.log
localhost_access_log.YYYY-MM-DD.txt ⇒ localhost_access_log.txt
【検証環境】
・OS: CentOS7.x, REHL 8.x
・Tomcat9
【設定方法】
それでは本題に入ります。
catalina.outは変更する必要がないので除外します。
・catalina.YYYY-MM-DD.log, localhost.YYYY-MM-DD.logの変更方法
これらのログファイル名はlogging.propertiesで変更します。
デフォルトのlogging.propertiesは下記の様になっています。
{CATALINA_HOME}/conf/logging.properties
--省略--
############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 90
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8
2localhost.org.apache.juli.AsyncFileHandler.level = FINE
2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
2localhost.org.apache.juli.AsyncFileHandler.maxDays = 90
2localhost.org.apache.juli.AsyncFileHandler.encoding = UTF-8
--省略--
これを下記のように変更します。
{CATALINA_HOME}/conf/logging.properties
--省略--
############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 90
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8
1catalina.org.apache.juli.AsyncFileHandler.rotatable = false ##追記
2localhost.org.apache.juli.AsyncFileHandler.level = FINE
2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
2localhost.org.apache.juli.AsyncFileHandler.maxDays = 90
2localhost.org.apache.juli.AsyncFileHandler.encoding = UTF-8
2localhost.org.apache.juli.AsyncFileHandler.rotatable = false ##追記
--省略--
上記のようにFileHandlerで“rotatable = false”を指定するとファイル名から日付が排除されます。
ただし、お気付きの様にTomcatでのログローテーションは行われませんので、logrotateなどで適切にローテーションする必要があります。
これで、それぞれのログを
・catalina.log
・localhost.log
として出力することに成功しました。
・localhost_access_log.YYYY-MM-DD.txtの変更方法
アクセスログについてはserver.xmlで変更します。
デフォルトでは下記の様になっています。
{CATALINA_HOME}/conf/server.xml
--省略--
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
--省略--
これを下記のように変更します。
{CATALINA_HOME}/conf/server.xml
--省略--
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="combined" rotatable="false" />
--省略--
以上で、アクセスログについても
・ localhost_access_log.txt
として出力することができました。
【結論】
今回はTomcatのログファイル名から日付を排除する方法について記載しました。
Tomcat9での検証でしたが、旧バージョンでも基本的には同じかと思います。
近頃はfluentdでAWS S3やElasticSearchにログファイルを転送し、分析や可視化を行うケースも多いので出力されるログファイル名は固定しておきたいですね!
This article focuses on how to change the file name of Tomcat logs.
To eliminate YYYY-MM-DD format from the file name, modifying Tomcat config file is one of the valid approach.