- PR -

Log4jのDailyRollingFileAppender設定について

1
投稿者投稿内容
yuki
会議室デビュー日: 2004/07/28
投稿数: 6
投稿日時: 2004-07-28 10:36
こんにちは。yukiと申します。

Log4jのDailyRollingFileAppenderを利用して、一日単位でログファイルを
新規生成しています。
Log4jの設定は同一なのに、2台のサーバで違う振る舞いをするため悩んでいます。

2台のサーバの現象と違いは以下のとおりです。
 TEST機:正常動作。毎日0時に再起動。その他は24時間稼動。 
 開発機:日付が変わってもファイルが切り替わらない。日中のみ稼動。
基本的に夜中の時間帯は稼動していない。

ドキュメントを見ると確かに「各日の"真夜中"に切り替わります」と載っていました。
http://www.ingrid.org/jajakarta/log4j/jakarta-log4j-1.1.3/docs-ja/api/index.html

しかし疑問なのはDailyRollingFileAppenderが「どのタイミングで」日付変更を
判別しているのか、という点です。
私の当初の考えでは、日付変更後最初にログが書き込まれる(=Httpリクエストがある)
タイミングで、昨日のファイルがリネームされ、新規ログファイルが生成されると
思っておりました。
しかし、今回の現象で真夜中(0:00)になったタイミングでファイルを生成している?のかと
思いはじめました。
(厳密に言えば、正常動作しているサーバも0:00には停止しているのですが)
だとすれば、考えにくいけれども意図しない部分でスケジューラ的な
振る舞いをしているのでしょうか。

最終的には、開発機も1日ごとにログファイルが切り替わるよう解決したいのですが
この部分の疑問が解けないため前に進めません。
長くなってしまい恐縮ですが、お知恵を拝借いただけたら幸いです。
よろしくお願いいたします。

■環境(2台共通)
Windows2000, IIS+ColdFusionMX6.1
JAVA1.4.2, log4j-1.2.7.jar

■log4j.properties(関連部分のみ抜粋)
log4j.appender.WF.File=D:/SampleAP/logs/daily.log
log4j.appender.WF = org.apache.log4j.DailyRollingFileAppender
log4j.appender.WF.DatePattern = '.'yyyy-MM-dd
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-07-28 11:07
手元にあるlog4j-1.2.8のソースで確認したところ、ログファイルの切り替えはログの
出力が行われる時(org.apache.log4j.Logger#infoメソッドなどが呼ばれた時)に
行われているようですよ。

# 正確に言うと、「ログファイルの切り替えが必要かどうかを判断し、必要であれば
# 切り替えを行う、という作業を実施するためのトリガは、ログ出力用メソッド
# の呼び出しである」ということです。

お使いのバージョンのソースで一応確認されたらいかがでしょうか?
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-07-28 12:21
引用:

yukiさんの書き込み (2004-07-28 10:36) より:
こんにちは。yukiと申します。
 TEST機:正常動作。毎日0時に再起動。その他は24時間稼動。 


この「正常動作」というのは、どのようなことを「正常」と呼んでいるのでしょうか。
書き込みを読む限りでは今ひとつはっきりしないのですが…
yuki
会議室デビュー日: 2004/07/28
投稿数: 6
投稿日時: 2004-07-28 13:14
ご返答ありがとうございます。
引用:

ukさんの書き込み (2004-07-28 12:21) より:
この「正常動作」というのは、どのようなことを「正常」と呼んでいるのでしょうか。
書き込みを読む限りでは今ひとつはっきりしないのですが…


本日現在のログはdaily.logに追加出力され、昨日のログはdaily.log.2004-07-27と
いう名前でD:/SampleAP/logs/以下に保存されている…という動作です。

D:/SampleAP/logs/daily.log(本日0:00から現時刻までのログ)
D:/SampleAP/logs/daily.log.2004-07-27(27日0:00〜23:59までのログ)

log4j-1.2.7のソースは今確認しています。
スキルがおぼつかず、ソースのどのあたりを調べればよいのか途方にくれていましたが
おばけ様に教えていただいた情報を元に、がんばって調べたいと思います。
(0byteのJavaファイルって??)
結果はまたこの場で報告させていただきます。
yuki
会議室デビュー日: 2004/07/28
投稿数: 6
投稿日時: 2004-07-28 15:48
log4j-1.2.7の出力部分を確認できました。
# 前投稿の0byte〜は単にファイルの解凍に失敗していただけでした。

おばけ様に確認していただいた1.2.8と同じく、1.2.7も、ログファイル出力時に
org.apache.log4j.DailyRollingFileAppenderのrollOverメソッドで
ログファイルの切り替え判別と切り替えをおこなっているようです。

ということは、私の環境で開発機のログファイルが切り替わらないのは
サーバの起動時刻とは関係ないのですね。
他の原因を探ってみようと思います。

おばけ様、uk様ありがとうございました。
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2004-07-28 19:56
http://www.jajakarta.org/kvasir/bbs/technical/745?msg=2#msg2527
http://diary.hatena.ne.jp/yzn/20040402
に同じような現象が載っていますが、これですかね?
(ただ、解決方法にいまいち納得できないですが。。。)


あと、古い情報ですが
http://java-house.jp/ml/archive/j-h-b/047232.html
という情報もあります。(あまりに古いのでこちらは関係ない可能性大ですが。)


ちなみに2台のサーバは、稼働時間が違うだけで、サーバ環境としては全く同じ構成なのでしょうか?
(ここが一番引っかかりますよね。)
1

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