CGI-BBS > サーバ > Apache > Apacheのログについて


カレッヂ
カレッヂ


質問者 いるか  投稿日 2/27(水) 22:44:25
Apacheでログ記録が残りますが、データは蓄積されていくのみで古いデータはある程度で消えていかないのですか?教えてください。
回答者 今夜がやすだ  [削除]  投稿日 3/2(土) 01:10:05
*BSD, Linuxでの環境下でもwindowsでも、ログのrotateするやり方になりますが、
*BSDならnewsyslog、Linuxならcron、windowsならログをrotateするscriptをタスクでって手がありますね。
回答者 今夜がやすだ  [削除]  投稿日 3/3(日) 00:20:27
もう一つapache独自のrotateコマンドがありました。実際にコーテーションさせるには、
httpd.confの中のログ関連の項目あたりに

TransferLog "| /usr/local/apache/bin/rotatelogs /usr/local/apache/logs/http-access.log 604800"

とか書きます。604800とは、7日×24時間×60分×60秒のことです。これで一週間したらローテーションさせることになります。
質問者 いるか  [削除]  投稿日 3/7(木) 22:03:29
お返事ありがとうございます。
実は、CGIの入門書についてきたApache1.3.14をインストールして、職場の部署内のLANでホームページを見れるようにしただけで、Apacheについて知識は無に等しく、基本的なことがわかっておりません。
パソコンはWindowsで、本にあったとおりC:にApacheをインストールして、その中にbinフォルダがありますが、前回書いていただいたとおりにhttpd.confの中のログ関連あたりに書きこめばいいのでしょうか?
また、自動で起動・終了する方法があれば教えてください。
お手数かけて申し訳ありません。よろしくお願いします。
回答者 今夜がやすだ  [削除]  投稿日 3/8(金) 00:07:27
httpd.confの
CustomLog logs/error.log
のあたりに上のTransferLogを書き込むとよいでしょう。
Windowsだと
TransferLog "| D:\applications\apache_group\apache\bin\rotatelogs.exe D:\applications\apache_group\apache\logs\error.log 604800"
などとします。パスの設定は慎重に。
ローテートのコマンドについては、
rotatelogs.exe <logfile> <rotation time in seconds>
以外ないようです。サイズでのローテートがあるといいのにと私は思ったりしてますが。。。

Windowsの初期起動の制御は、NT/2k/XP[pro]ならサービスにての制御となり、管理ツールなどのサービスでやってください。インストールされると勝手にApacheなるサービスが登録されているはずです。IISと連動して実行する場合、ポート番号が重複しないように注意しましょう。
95/98/Me/XP[home]ならスタートアップに:\applic~\apache_group\apache\bin\apache.exe -w -n "Apache" -k startなるリンクを貼っておけばよいでしょう。ちなみにこのショートカットはインストールした時点でスタートメニュー->プログラム->Apache HTTP Server->Control ...->Startのこと。
回答者 みみみ  [削除]  投稿日 3/8(金) 11:54:02
ちょっと割り込みで質問させて頂きます。
わたしもこれは以前から何とかならないかと思っていました。

確かに今夜がやすださんの方法だとエラーログは指定した時間以上は記録されないようですね。
これはこれでいいのですが、この方法だとエラーログのファイル名の後ろに10桁の数字が付いて
しまいます。常時PCを起動していてApacheの再起動などやならいのであればこれでも問題
ないのですが、わたしの場合はApacheの起動・終了と最低一日一回やります。そうするとこの
エラーログはフォルダーの中にどんどん増えていきます。ファイルサイズは上記の方法で抑え
られますけど、フォルダーの中にログファイルがどんどん出来ていくのは困りますね。

このエラーログを起動ごとに割り当てるのではなく、一定にする方法などありますでしょうか?
これができれば非常に有難いのですが。


回答者 今夜がやすだ  [削除]  投稿日 3/9(土) 23:55:44
みみみさん、確かにhttpd.confのTransferLogを使ったやり方は、サービスの起動、停止すると一週間の設定なんて無視して新しいログを吐き出しますね。
そうすると、タスクで自作のローテートスクリプトを実行とかになるんじゃないですか。
それかTransferLogはそのまま上の設定で、タスクでログファイルを掃除するとか。
回答者 みみみ  [削除]  投稿日 3/11(月) 09:47:42
なるほどね、やはりこの方法しかなさそうですね。
ところでTransferLog内にはバッチファイルとかも記述できるのでしょうか?

TransferLog "| D:\apache\bin\rotatelogs.bat"

こんな感じで記述してそのバッチファイル内で
rotatelogs.exe と 古いファイルを削除するスクリプトを書いて実行させる。
こんなんでどうでしょう?

回答者 今夜がやすだ  [削除]  投稿日 3/12(火) 01:57:18
pipeからバッチ処理して、rotatelogsと掃除スクリプトをそこで使うなら、掃除スクリプトがログを吐き出すごとにいつも起動されてしまいます。apacheの起動時に新しく作られるログファイルの掃除が目的なので、タスクでたまに掃除したほうがよろしいんではないでしょうか?
それから、バッチファイルにSTDIN使えます?

TransferLogとCustomLogは、ほぼ同じみたいです。
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog "| /usr/local/bin/rotatelogs access.log 86400" common
としてもいいみたい。
回答者 みみみ  [削除]  投稿日 3/12(火) 10:28:35
>pipeからバッチ処理して、rotatelogsと掃除スクリプトをそこで使うなら、掃除スクリプ
>トがログを吐き出すごとにいつも起動されてしまいます。

確かにそうですね。うかつでした。

>apacheの起動時に新しく作られるログファイルの掃除が目的なので、タスクでたまに掃除
>したほうがよろしいんではないでしょうか?

それが一番簡単で確実だと思います。

>それから、バッチファイルにSTDIN使えます?

バッチファイルなんてもう何十年も作ってないので、すっかり忘れています。
しかしバッチでできるのであれば、OS起動時にバッチを動かし、掃除するなんてことも可能
でしょうけど、とにかく今回はタスク処理で掃除する方法を取ります。

どうもありがとうございました。

質問者 いるか  [削除]  投稿日 3/12(火) 22:14:56
おかげさまでなんとか成功しました。
またこれからいろいろと勉強したいと思います。
また何かあったら助けて下さい。ありがとうございました。

このページは終了したので返信(回答)は書きこめません

Web裏技