Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


Apache2.4とTomcatで一定期間後のログを削除する方法

Cobos4iでは、IBM HTTP ServerとWebSphere Application Serverに加えて、Apache Tomcatも動作環境として利用できるようになりました。Cobos4iの開発環境では、Tomcatアプリケーションサーバーのスタンドアロン構成で開発を行います。一方、運用環境では、Apache WebサーバーとTomcatアプリケーションサーバーを連携させて運用します。
運用環境ではログが溜まり続けるとディスクが圧迫される可能性も考えられます。
そのため、本Tipsでは、Apache WebサーバーおよびTomcatアプリケーションサーバーのログを、一定期間経過後に自動削除する手順をご紹介します。

Apache2.4(Apache HTTP Server 2.4)のログ

Windows版Apache2.4のログはデフォルト設定の場合、${SRVROOT}/logs ディレクトリにaccess.log 、error.log が出力されます。ログは1つのファイルに出力され続けるため、一般的には一定期間ごと、または日付ごとにログローテーションを行います。

例)

    #エラーログ
    ErrorLog "|bin/rotatelogs.exe logs/error_%Y-%m-%d.log 86400"

    # アクセスログ
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

    CustomLog "|bin/rotatelogs.exe logs/access_%Y-%m-%d.log 86400" combined

Tomcat9 のログ

Tomcatアプリケーションサーバーのログは${catalina.base}/logs に保存されます。
Tomcat9のデフォルトでは日付毎にログが出力されます。

  • catalina.2026-08-24.log (Tomcatの起動・停止、Connector、Webアプリの配備、Tomcat内部エラーなど)
  • localhost.2026-08-24.log (Servlet/JSP、Webアプリの起動・停止、アプリ側で発生した例外など)
  • host-manager.2026-08-24.log (Host Managerアプリのログ)
  • manager.2026-08-24.log (Managerアプリのログ)
  • commons-daemon.2026-08-24.log (Tomcatサービスの起動・停止、サービス)
  • tomcat9-stderr.2026-08-24.log (標準エラー出力)
  • tomcat9-stdout.2026-08-24.log (標準出力)

上記4つのログファイルは ${catalina.base}/conf/logging.properties のmaxDays設定で保存期間が設定できます。
maxDays = 90 の場合、90日を超えたログファイルが削除対象になります。

############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################

1catalina.org.apache.juli.AsyncFileHandler.level = ALL
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 = ALL
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

3manager.org.apache.juli.AsyncFileHandler.level = ALL
3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
3manager.org.apache.juli.AsyncFileHandler.prefix = manager.
3manager.org.apache.juli.AsyncFileHandler.maxDays = 90
3manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8

4host-manager.org.apache.juli.AsyncFileHandler.level = ALL
4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
4host-manager.org.apache.juli.AsyncFileHandler.maxDays = 90
4host-manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8

一方、commons-daemon.YYYY-MM-DD.logtomcat9-stderr.YYYY-MM-DD.logtomcat9-stdout.YYYY-MM-DD.log は日付ごとに作成されますが、自動的には削除されません。
そのため、Apache Webサーバーおよび自動的に削除されないTomcatのログについては、一定期間経過後に削除するPowerShellスクリプトを作成し、タスクスケジューラから定期的に実行するよう設定します。

ログの削除方法

PowerShellスクリプト例

$RetentionDays = 90 はログの保存期間です。
ログを保存しておきたい期間を指定してください。
また、C:\Apache24\logs や C:\Tomcat\logs はログの保存先を指定します。
環境に合わせて変更が必要です。

例) DeleteOldLogs.ps1

$RetentionDays = 90
$LimitDate = (Get-Date).AddDays(-$RetentionDays)

# Apache
Get-ChildItem "C:\Apache24\logs" -File |
    Where-Object {
        ($_.Name -like "access_*.log" -or
         $_.Name -like "error_*.log") -and
        $_.LastWriteTime -lt $LimitDate
    } |
    Remove-Item -Force

# Tomcat Windows Service
Get-ChildItem "C:\Tomcat\logs" -File |
    Where-Object {
        ($_.Name -like "commons-daemon.*.log" -or
         $_.Name -like "tomcat9-stdout.*.log" -or
         $_.Name -like "tomcat9-stderr.*.log") -and
        $_.LastWriteTime -lt $LimitDate
    } |
    Remove-Item -Force

上記スクリプトをWindowsのタスクスケジューラから深夜などに定期実行することで、一定期間を経過したログを自動的に削除できます