4.2.3 ログを分割する(rotatelogsプログラム)
アクセスログ,エラーログ,リクエストログを一定時間単位(例えば,24時間ごと)に分割して,複数のファイルに出力できます。rotatelogsプログラムは次のディレクティブに指定できます。
-
CustomLogディレクティブ
-
ErrorLogディレクティブ
-
HWSRequestLogディレクティブ
-
HWSWebSocketLogディレクティブ
-
TransferLogディレクティブ
プログラムの指定方法を次に示します。
(1) 形式
rotatelogs 分割ログファイルのプリフィックス ログ分割時間間隔 〔-fnum ファイル数〕〔-diff GMTに対する時差〕〔-opt use_mtime〕〔-opt date_suffix〕
(2) オペランド
-
分割ログファイルのプリフィックス
分割ログファイルのプリフィックスを絶対パスで指定します。
「プリフィックス.nnnnnnnnnn」というファイルに,ログを採取します。
- nnnnnnnnnn:ログ採取開始時刻を表します。ログ採取時刻とは次の式で示す値です。
-
((1970年1月1日の0時0分0秒(GMT:Greenwich Mean Time)を起点とした,ログを出力する時間の通算秒数÷ログ分割時間間隔)の小数点以下を切り捨てた値)×ログ分割時間間隔
-
ログ分割時間間隔 〜((1−31536000))
一つのログファイルを採取する時間間隔を秒単位に指定します。指定した時間間隔を超えた最初のログ出力時,新規ファイルにログを採取します。ただし,-opt date_suffix指定時は86400秒(=24時間)以上を指定してください。86400秒よりも小さい値を指定した場合,同じ日付のファイルに出力し続けることがあります。
-
-fnum ファイル数 〜((1−256))
分割したログファイルのファイル数を指定します。分割したファイル数がここで指定した数を超えた場合,最も古いファイルから削除されます。このオペランドを省略した場合,ファイルは削除されません。
-
-diff GMTに対する時差 〜((-1439−1439))
ログファイルを分割する基準となる時間を,GMTに対する時差として分単位で指定します。指定しないまたは0を指定すると,1970年1月1日0時0分0秒(GMT)が基準時間となります。GMTに対するローカルタイムの差がn時間である場合に,ローカルタイムのm時0分0秒を基準にする場合には,(n-m)×60を指定します。JSTの0時0分0秒を基準にする場合には,(+9-0)×60で540を指定します。
-
-opt use_mtime
通常-fnum指定時に最も古いファイルを選択する際,分割ログファイルのctimeの日時を使用します。このオプションを指定すると,分割ログファイルのctimeの日時の代わりにmtimeの日時を使用します。ウィルススキャンソフトなどによって,分割ログファイルのctimeの日時が更新されることで最も古いファイルが正しく削除されなくなる場合にこのオプションを指定します。
-
-opt date_suffix
年月日を含む分割ログファイル名にする場合に指定します。
(3) 使用方法
ディレクティブに,"|プログラム名"の形式で指定して使用します。ログファイルを定期的に別ファイルに分割して採取します。
- (例)Windows版
-
24時間ごとに,アクセスログを分割して<Application Serverのインストールディレクトリ>\httpsd\logs\access.nnnnnnnnnnファイルに採取します。分割時間を日本時間に設定し,日本時間の毎0時にログファイルを分割する場合の指定を次に示します。
TransferLog "|\"\"<Application Serverのインストールディレクトリ>/httpsd/sbin/rotatelogs.exe\" \"<Application Serverのインストールディレクトリ>/httpsd/logs/access\" 86400 -diff 540\""
-
ログファイル名:<Application Serverのインストールディレクトリ>\httpsd\logs\access.nnnnnnnnnn
-
ログ分割時間間隔:86400秒(=24時間)
年月日を含むファイル名(access.YYYYMMDD)のファイルにアクセスログを採取する指定を次に示します。
TransferLog "|\"\"<Application Serverのインストールディレクトリ>/httpsd/sbin/rotatelogs.exe\" \"<Application Serverのインストールディレクトリ>/httpsd/logs/access\" 86400 -diff 540 -opt date_suffix\""
-
ログファイル名:<Application Serverのインストールディレクトリ>\httpsd\logs\access.YYYYMMDD
-
- (例)UNIX版
-
24時間ごとに,アクセスログを分割して/opt/hitachi/httpsd/logs/access.nnnnnnnnnnファイルに採取します。分割時間を日本時間に設定し,日本時間の毎0時にログファイルを分割する場合の指定を次に示します。
TransferLog "|/opt/hitachi/httpsd/sbin/rotatelogs /opt/hitachi/httpsd/logs/access 86400 -diff 540"
-
ログファイル名:/opt/hitachi/httpsd/logs/access.nnnnnnnnnn
-
ログ分割時間間隔:86400秒(=24時間)
年月日を含むファイル名(access.YYYYMMDD)のファイルにアクセスログを採取する指定を次に示します。
TransferLog "|/opt/hitachi/httpsd/sbin/rotatelogs /opt/hitachi/httpsd/logs/access 86400 -diff 540 -opt date_suffix"
-
ログファイル名:/opt/hitachi/httpsd/logs/access.YYYYMMDD
-
(4) 注意事項
(a) UNIX版の注意事項
-
rotatelogsプログラムはSIGTERM,SIGUSR1およびSIGHUPシグナルを受信してもプロセス終了処理を実施しませんが,制御プロセスとサーバプロセスが終了すればプロセス終了します。
(b) Windows版の注意事項
-
サービスとして起動した場合には,制御プロセスのログは採取されません。
-
ログファイルは,そのファイルを開いているプロセスがある間は削除できません。このため,-fnumで指定した値より多いファイルが残ることがあります。例えば,制御プロセスがログを出力したファイルは,制御プロセスが終了するまで削除されません。
-
起動時に引数誤りなどがあった場合にWebサーバは起動しますが,rotatelogsプログラムは起動しません。その際,rotatelogsプログラムではイベントログに次に示す属性を持ったメッセージを出力します。
-
種類:エラー
-
ソース:CosminexusHTTPServer
-
分類:なし
-
イベント:3299
-
説明:rotatelogs.exe: (メッセージ)
出力されたメッセージの意味については,マニュアル「アプリケーションサーバ メッセージ(構築/運用/開発用)」の「21.7.4 rotatelogsプログラム」を参照してください。
このメッセージが出力されていた場合,メッセージ内容に従って引数を見直したあとにサーバを再起動してください。なお,同じメッセージが複数回出力されることがあります。
-
(c) 共通の注意事項
-
-fnumオペランドの指定によるログファイルの制御はWebサーバの再起動時に,ディレクトリ名またはログファイルのプリフィックスを変更すると,以前に採取したログファイルは削除されません。この場合は運用に応じて削除してください。
-
Webサーバを起動または再起動してから,指定したログ分割間隔時間が経過した場合,分割したログファイルのプリフィックスに一致するファイルの数が-fnumオペランドの指定値を超えると,作成時間または更新時間(-opt use_mtime指定時)の古いログファイルから削除されます。
-
分割ログファイルのプリフィックスは絶対パスで指定してください。
-
TransferLog,CustomLog,ErrorLog,およびHWSRequestLogディレクティブのrotatelogsプログラムの引数指定に誤りがある場合,rotatelogsプログラムの起動に失敗しますが,Webサーバは起動します。この場合はログが出力されません。TransferLog,CustomLog,ErrorLog,およびHWSRequestLogディレクティブにrotatelogsプログラムを指定した場合は,ログファイルが作成され,意図した分割が実施されることを確認してください。