【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

WindowsのApacheのログローテートでログを削除する方法

インフラエンジニアの伊藤です。

LinuxのApacheのログのローテーション設定については、logrotateで行っています。

ログローテーションについてはこちらをご参照ください。
ログローテーション(logrotate)を使ってみる ( httpd(apache)の設定例 ) | レンタルサーバー・自宅サーバー設定・構築のヒント

そういえばWindowsのログローテーションってどうやってるんだろう、と調べてみると、
WindowsのApacheに付属している「rotatelogs.exe」でログのローテーションをしていますが、削除は出来ないようです。

ローテーション後の古いログの削除方法についてです。

Apacheのログ設定を確認する

Apacheのログファイルの出力設定を「httpd.conf」にて設定します。
ログの出力を1日ごとに設定変更します。

1
2
3
4
5
6
7
#元々の設定
   ErrorLog "|bin/rotatelogs.exe logs/error-%Y%m%d-%H.log 10M -l"
   CustomLog "|bin/rotatelogs.exe logs/access-%Y%m%d-%H.log 10M -l" common
 
#設定変更後
   ErrorLog "| bin/rotatelogs.exe logs/error_%Y%m%d.log 86400"
   CustomLog "| bin/rotatelogs.exe logs/access_%Y%m%d.log 86400" common

元々の設定が「ログが10MBに達するとローテーション」となっているので、
「86400秒(1日)経過するごとにローテーション」の設定にします。

Linuxであれば設定をしてあげればlogrotateがログの削除までしてくれますが、
Windowsの場合はここから一工夫が必要になります。

バッチファイルを作成する

バッチファイルを作成し、バッチを定期的に実行することで、ローテーションされた古いファイルを削除することが可能です。

1
forfiles /P "D:\Apache\logs" /D -7 /C "cmd /c del @file"

「forfiles」コマンドで、条件に合うファイルを抽出します。
各引数の意味については以下になります。

引数 説明
/P 対象のパス
/D ファイルの更新日付に基いて抽出(-7なら7日前)
/C 出力したファイルに対して、別コマンドを実行する(この場合はcmdコマンド)
@file 抽出したファイルの変数(@extなら抽出したファイルの拡張子を表す変数となる)

このようなバッチファイルを作成してタスクスケジューラに登録することで、
ローテーションしたファイルから、x日前のファイルを消すことが可能になります。
また、delコマンドでなく圧縮のコマンド(7zip等が必要になりますが)を使うことで、
古いログを圧縮することも可能です。組み合わせは無限大ですね。

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
2
読み込み中...
2 票, 平均: 1.00 / 12
21,625
X facebook はてなブックマーク pocket
【2026.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

【2026.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

この記事をかいた人

About the author