Package nablarch.core.log.basic
Class DateRotatePolicy
java.lang.Object
nablarch.core.log.basic.DateRotatePolicy
- All Implemented Interfaces:
RotatePolicy
日時でログのローテーションを行うクラス。
ログ書き込み時の現在日時 >= 保持している次回ローテーション日時の場合、ローテーションを行う。
ログ書き込み時の現在日時 >= 保持している次回ローテーション日時の場合、ローテーションを行う。
プロパティファイルの記述ルールを下記に示す。
- rotateTime
- ローテーション時刻。オプション。
特定の時刻にログファイルをローテーションしたい場合に指定する。
時刻は、HH, HH:mm, HH:mm:ss のいずれかのフォーマットで指定する。デフォルトは00:00:00。
次回ローテーション日時は、システム起動時とローテーション時に算出する。 計算方法は以下の通り。
まず、次回ローテーション日時を決めるための基準日時を決定する。 基準日時は、システム起動時かつログファイルが既に存在する場合とそれ以外の場合で以下の2通りの日時を採用する。
- システム起動時かつログファイルが存在する場合 → ログファイルの最終更新日時
- それ以外の場合 → システム日時
次に、基準日時の時刻と rotateTime の時刻を比較して、次回ローテーション日時の日付を決定する。
- 基準日時の時刻 <= rotateTime → 基準日時の日付
- rotateTime < 基準日時の時刻 → 基準日時の日付 + 1日
この日付に rotateTime の時刻を設定したものを、次回ローテーション日時とする。
例えば、rotateTimeに 12:00:00 が設定されており、基準日時が 2023-03-25 11:59:59 の場合、
次回ローテーション日時は 2023-03-25 12:00:00 となる。
rotateTimeに 12:00:00 が設定されており、基準日時が 2023-03-25 12:00:01 の場合、
次回ローテーション日時は 2023-03-26 12:00:00 となる。
ローテーション後のログファイル名は、 <ログファイルパス>.yyyyMMddHHmmssSSS.old となる。 yyyyMMddHHmmssSSSにはローテーション実施時刻が出力される。
- Author:
- Kotaro Taki
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected Date
現在日時を返す。ローテーション先のファイル名を決定する。ログファイル読み込み時に出力する、ローテーションの設定情報を返す。void
initialize
(ObjectSettings settings) 初期処理を行う。boolean
needsRotate
(String message, Charset charset) ローテーションが必要かの判定を行う。void
onOpenFile
(File file) ログファイル読み込み時に発生するイベント。
ファイルサイズによるローテーションなどを独自で実装したい場合に使用する。void
ログファイル書き込み時に発生するイベント。
ファイルサイズによるローテーションなどを独自で実装したい場合に使用する。void
ローテーションを行う。
-
Constructor Details
-
DateRotatePolicy
public DateRotatePolicy()
-
-
Method Details
-
initialize
初期処理を行う。 起動時にログファイルパスにログファイルが既に存在する場合は、ファイルの更新時刻から次回ローテーション日時を算出する。 この初期化処理により、例えば2023年3月6日にログファイルに書き込み後アプリを停止。2日後にアプリを再起動する場合、 起動時に本クラスが保持する次回ローテーション日時は2023年3月7日 となる。- Specified by:
initialize
in interfaceRotatePolicy
- Parameters:
settings
- LogWriterの設定
-
needsRotate
ローテーションが必要かの判定を行う。
現在時刻 >= 次回ローテーション日時の場合、ローテーションが必要と判定する。
それ以外の場合は、ローテーションが不要と判定する。- Specified by:
needsRotate
in interfaceRotatePolicy
- Parameters:
message
- ログファイルに書き込まれるメッセージcharset
- 書き込み時に使用する文字エンコーディング- Returns:
- ローテーションが必要な場合はtrue
-
decideRotatedFilePath
ローテーション先のファイル名を決定する。 古いログファイル名は、 <ログファイルパス>.yyyyMMddHHmmssSSS.old のフォーマットで出力される。 日時には、ローテーション実施時刻が出力される。- Specified by:
decideRotatedFilePath
in interfaceRotatePolicy
- Returns:
- ローテーション先のファイル名
-
rotate
ローテーションを行う。 リネーム完了後に、 次回ローテーション日時を更新する。- Specified by:
rotate
in interfaceRotatePolicy
- Parameters:
rotatedFilePath
- ローテーション先のファイルパス- Throws:
IllegalStateException
- ログファイルのリネームができない場合
-
getSettings
ログファイル読み込み時に出力する、ローテーションの設定情報を返す。
設定情報のフォーマットを下記に示す。
ROTATE TIME = [<ローテーション時刻>] NEXT ROTATE DATE = [<次回ローテーション日時>] CURRENT DATE = [<現在時刻>]
- Specified by:
getSettings
in interfaceRotatePolicy
- Returns:
- 設定情報
- See Also:
-
currentDate
現在日時を返す。- Returns:
- 現在日時
-
onWrite
ログファイル書き込み時に発生するイベント。
ファイルサイズによるローテーションなどを独自で実装したい場合に使用する。- Specified by:
onWrite
in interfaceRotatePolicy
- Parameters:
message
- ログファイルに書き込まれるメッセージcharset
- 書き込み時に使用する文字エンコーディング
-
onOpenFile
ログファイル読み込み時に発生するイベント。
ファイルサイズによるローテーションなどを独自で実装したい場合に使用する。- Specified by:
onOpenFile
in interfaceRotatePolicy
- Parameters:
file
- 読み込まれたファイル
-