みなさん、こんにちは。
つい先日、大失敗をしてしまいました。システムが突然動かなくなり、調査してみるとディスク容量がいっぱいに…。
原因を探ると、Tomcat のログが延々と蓄積されていたことが判明しました。ログのローテーション設定を怠ったばかりに、サーバーが停止する事態に…。
ディスク容量がいっぱいになった際の復旧は、何かと大変です。幸い停止してもそれほど業務に影響がでないシステムだったので事なきを得ましたが…。
私が犯したような失敗を防ぐため、Windows Server 環境で Tomcat のログを適切にローテーションさせる方法についてまとめました。
Tomcat を運用している方は、ぜひ参考にしてください。
1. Tomcat のログが増え続ける理由
Tomcat には catalina.out
をはじめ、さまざまなログファイルが出力されます。Windowsの場合、デフォルトではローテーションの設定がされておらず、放置するとログファイルが肥大化していきます。
特に、以下のログは出力量が多く、適切な管理が必要です。
catalina.log
: サーバー全体のログlocalhost.log
: アプリケーションのログmanager.log
: Manager アプリのログhost-manager.log
: Host Manager のログ- 標準出力 (
stdout.log
) および 標準エラー (stderr.log
)
2. ログローテーションの設定方法
Tomcat では logging.properties
を編集することで、ログローテーションの設定が可能です。
(1) logging.properties
の編集
まず、conf/logging.properties
を開き、以下の設定を追加・変更します。
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.limit = 524288000
1catalina.org.apache.juli.AsyncFileHandler.count = 3
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 90
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8
# その他のログも同様に設定
この設定により、ログが 500MB を超えたら新しいファイルが作成され、最大 3 世代まで保持されるようになります。
(2) 標準出力・標準エラーのローテーション
標準出力 (stdout.log
) や標準エラー (stderr.log
) も、以下のように設定を追加することでローテーション可能です。
java.util.logging.FileHandler.pattern = logs/tomcat9-stdout.%u.%g.log
java.util.logging.FileHandler.limit = 524288000 # 500MB
java.util.logging.FileHandler.count = 3 # 3 世代保持
java.util.logging.FileHandler.append = true
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
3. 適用方法と注意点
設定を適用するには、Tomcat を再起動 する必要があります。また、ログの管理をより徹底するため、定期的なログの監視 を実施してください。
(1) 設定の確認方法
Tomcat を再起動した後、logs
フォルダを確認し、以下のようにファイルがローテーションされていれば成功です。
catalina.2025-03-07.log
catalina.2025-03-06.log
catalina.2025-03-05.log
(2) Windows Server 環境での注意点
Windows 環境では、ファイルが開かれていると削除や移動ができない場合があります。もし logging.properties
のローテーションがうまく動作しない場合、logrotate や PowerShell スクリプトを活用 するのも一つの手です。
Get-ChildItem "C:\path\to\logs\catalina.*.log" | Sort-Object LastWriteTime -Descending | Select-Object -Skip 3 | Remove-Item
4. まとめ
私のように、ログ管理を怠ってサーバーが停止してしまう事態にならないよう、適切なログローテーション設定を行い、定期的な監視を習慣化すること が大切です。
もし、設定しても動作しない場合は、Tomcat のバージョンや Windows の権限設定を再確認してみてください。
本日も最後までお読みいただきありがとうございました。
それではよいIoTライフを!