- PR -

Windowsで稼動しているTomcatで出力されるstdout.logのログローテーション方法について

1
投稿者投稿内容
yoshiki
会議室デビュー日: 2005/05/21
投稿数: 13
投稿日時: 2008-01-18 02:37
久しぶりに書き込みさせて頂きます。


現在、WindowsServer2003上にてTomcat5.0.28をAPサーバーとして稼動しております。
Tomcatの起動方法はWindowsサービスとして起動しています。

log4jがまだ世に広まる前の大昔に作成したWebアプリケーションのため、
ログ出力内容はstdout.logのみにしか出力していないという非常に恥ずかしい
Webアプリケーションとなっています。


そこで今回の相談ですが、現在アクセスが頻繁に発生し、
stdout.logが1ヶ月で約1GBも出力されており、
stdout.logを日次か週次かファイル容量でログローテーションさせたいと考えております。

Linuxではroglotateを使用すれば簡単に実現可能ですが、
Windowsでもログローテーションを実現することは可能でしょうか。
(色々と調査したのですが実現方法が分からずじまいです。)


無理なら1日1回Tomcatの再起動をさせるしかないと考えておりますが、
お客様からは24時間運用が前提のため、絶対にダメと言われておりほとほと困っております。


何かいい方法が御座いましたら是非アドバイスをお願い致します。


本当にくだらない質問で申し訳ございません。

[ メッセージ編集済み 編集者: yoshiki 編集日時 2008-01-18 02:39 ]
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2008-01-18 03:03
System.outをそのような動作を行う実装に取り替えるのがよいかと。
yoshiki
会議室デビュー日: 2005/05/21
投稿数: 13
投稿日時: 2008-01-18 04:10
Anthyhime様

早速のご回答ありがとうございます。


プログラム改修も考えたのですが、
その費用と時間がないため今は諦めている状況では有ります。

極力手間をかけずに対応したいと考えておりますが、
最悪1日1回の再起動かプログラムの改修をせざるを得ないかとも内心は考えております。


他にもWindowsでTomcatを運用されている方がいてると思いますが、
その方々はログをどのように運用しているのか非常に気にはなるところです。
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2008-01-25 19:25
そのウェブアプリの Context 要素の swallowOutput 属性を
true にすると、System.out, System.err の出力先が
Logger になります。
Dr.Doraemon
ぬし
会議室デビュー日: 2002/03/23
投稿数: 265
投稿日時: 2008-01-25 22:43
お疲れ様です。

どうやら、Windows版のlogrotateは、存在しないようです。
Cygwin等で利用するという手はありかもしれませんが・・・。

以下のページにWSHを使って、logrotateのような動作をさせる方法が掲載されていました。
http://kamoland.com/wiki/wiki.cgi?Apache%2bWindows2000%be%ae%b5%bb%bd%b8

ご参考まで・・・
yoshiki
会議室デビュー日: 2005/05/21
投稿数: 13
投稿日時: 2008-01-26 01:43
はしもと様

回答いただきましてありがとうございます。


そもそもこのWebアプリ自体すぐに使われなくなるだろうと思い、
ログ出力はSystem.out.printlnで良いわと軽い気持ちで作ってしまったのが原因ですが、
一度こちらの方法で実現可能かを確かめて見ます。

結果が分かり次第また返信させて頂きます。

以上よろしくお願い致します。
yoshiki
会議室デビュー日: 2005/05/21
投稿数: 13
投稿日時: 2008-01-26 01:46
Dr.Doraemon様

回答いただきましてありがとうございます。


記述されていたURLを確認したところ、やはりWindowsでは無理なのですね。。。
仕方がありませんので諦めますと良いたいところですが、
やはり悔しいため、記述されているスクリプトを参考に確認してみます。
(再起動しなければいけないのが非常に厳しいところですが・・・)


以上よろしくお願い致します。
yoshiki
会議室デビュー日: 2005/05/21
投稿数: 13
投稿日時: 2008-02-13 03:15
ご連絡が遅くなりまして申し訳ございません。


返答後、サーバを再起動するタイミングが中々無くて、この3連休でやっと再起動をする機会がありました。

で、やはり毎日サーバを再起動させるのは難しいと言うことなので、
swallowOutput 属性
を使用した方法で対応を行いました。


以下はserver.xmlに記述した内容です。Windowsをご使用の方で、
ログのローテーション等に悩んでおられる方は参考にしてください。

<Context path="/hogehoge" docBase="hogehoge" debug="0" swallowOutput="true"
reloadable="true" crossContext="true" trusted="false">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="hogehoge_" suffix=".log"
timestamp="true"/>
</Context>


これで、$TOMCAT_HOME/logs
直下にhogehoge_2008-02-13.logというように日付毎にログファイルが作成され、
日付が変わるとログローテーションがされるようになりました。
また、きちんとSystem.out.printlnの内容も出力される事が確認できました。
→ログファイル名やsuffixはご自由に変更してください。


元々はきちんとログ設計をしていなかった私が悪かったのですが、
皆様もログ設計はきちんと考えた方が後々の運用を考えると
非常に楽になりますのでご注意ください。


なお、stdout.logは出力されないように設定を変更しておきました。


ご回答して頂いた皆様には凄く感謝しております。
本当にありがとうございましたm(__)m
1

スキルアップ/キャリアアップ(JOB@IT)