QA@IT

アクセスログ出力方法(java)

6248 PV

はじめまして。アイスティと申します。
javaでWebサイトの開発を行っていて、質問があります。
開発環境はtomcat,eclipse

現状、log4jを利用して、ログを出力していますが、
そのログファイルとは別ファイルでアクセスログファイル

作成することになりました。
このファイルは書き込みがアクセス集中します。
ファイルの内容はユーザーID,アクセス日時のみです。
テキストファイルで出力します。

まず1つめの質問ですが、log4jライブラリを利用して
現状のログとは別に別ディレクトリにファイルを出力
することは可能でしょうか。その方法がわかりません。
調べてみたところ
log4j2.xmlの指定方法でappenders、RollingFileあたりが
参考になりますでしょうか。
また、要望として日付が変わるごとにローテーションも行
わないといけません。

2つめの質問ですが、そもそも大量アクセスにテキストフ
ァイルは耐え切れるのでしょうか。DB負荷を軽減したいた
め、テキスト出力の方向になりましたが、そもそもテキス
トでも可能なのか。

出力したファイルを別の工程で集計して一覧表示する必要
もあります。

アドバイスよろしくお願いします。

回答

別々のログを出力することはもちろん可能です。

ちなみにLog4j2では、非同期にログを出力するAsyncAppendarがあります。

https://logging.apache.org/log4j/2.x/manual/async.html

このAppendarを使うことでパフォーマンスに関する懸念は解消されるかと思いますが、デメリットもあります。

  • リアルタイムで出力されないため、エラー発生時のログには使わないこと
  • 非同期であるため、ログが出力される行順序は担保されません
編集 履歴 (0)

アクセスログってどの程度の出力数を想定している感じでしょうか?
log4jでも出来るでしょうし、まあたぶん余裕です、パフォーマンス面だけなら。

DBと比較すればテキストファイルはやることが圧倒的にシンプルですので、単なるシーケンシャルな出力だけならテキストファイルが有利です。
もちろんパフォーマンス以外の他の観点からDBがよいと言うこともあります。
※テキストファイルもやり方がまずければ当然遅くはなります。

想定される出力頻度とか、その他の条件、例えば複数サーバのログを統合するとか、ログの信頼度とか、そういったものはないですか?

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。