Class DateRotatePolicy

java.lang.Object
nablarch.core.log.basic.DateRotatePolicy
All Implemented Interfaces:
RotatePolicy

public class DateRotatePolicy extends Object implements 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

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected Date
    現在日時を返す。
    ローテーション先のファイル名を決定する。
    ログファイル読み込み時に出力する、ローテーションの設定情報を返す。
    void
    初期処理を行う。
    boolean
    needsRotate(String message, Charset charset)
    ローテーションが必要かの判定を行う。
    void
    ログファイル読み込み時に発生するイベント。
    ファイルサイズによるローテーションなどを独自で実装したい場合に使用する。
    void
    onWrite(String message, Charset charset)
    ログファイル書き込み時に発生するイベント。
    ファイルサイズによるローテーションなどを独自で実装したい場合に使用する。
    void
    rotate(String rotatedFilePath)
    ローテーションを行う。

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • DateRotatePolicy

      public DateRotatePolicy()
  • Method Details

    • initialize

      public void initialize(ObjectSettings settings)
      初期処理を行う。 起動時にログファイルパスにログファイルが既に存在する場合は、ファイルの更新時刻から次回ローテーション日時を算出する。 この初期化処理により、例えば2023年3月6日にログファイルに書き込み後アプリを停止。2日後にアプリを再起動する場合、 起動時に本クラスが保持する次回ローテーション日時は2023年3月7日 となる。
      Specified by:
      initialize in interface RotatePolicy
      Parameters:
      settings - LogWriterの設定
    • needsRotate

      public boolean needsRotate(String message, Charset charset)
      ローテーションが必要かの判定を行う。
      現在時刻 >= 次回ローテーション日時の場合、ローテーションが必要と判定する。
      それ以外の場合は、ローテーションが不要と判定する。
      Specified by:
      needsRotate in interface RotatePolicy
      Parameters:
      message - ログファイルに書き込まれるメッセージ
      charset - 書き込み時に使用する文字エンコーディング
      Returns:
      ローテーションが必要な場合はtrue
    • decideRotatedFilePath

      public String decideRotatedFilePath()
      ローテーション先のファイル名を決定する。 古いログファイル名は、 <ログファイルパス>.yyyyMMddHHmmssSSS.old のフォーマットで出力される。 日時には、ローテーション実施時刻が出力される。
      Specified by:
      decideRotatedFilePath in interface RotatePolicy
      Returns:
      ローテーション先のファイル名
    • rotate

      public void rotate(String rotatedFilePath)
      ローテーションを行う。 リネーム完了後に、 次回ローテーション日時を更新する。
      Specified by:
      rotate in interface RotatePolicy
      Parameters:
      rotatedFilePath - ローテーション先のファイルパス
      Throws:
      IllegalStateException - ログファイルのリネームができない場合
    • getSettings

      public String getSettings()
      ログファイル読み込み時に出力する、ローテーションの設定情報を返す。
      設定情報のフォーマットを下記に示す。
       
       ROTATE TIME         = [<ローテーション時刻>]
       NEXT ROTATE DATE    = [<次回ローテーション日時>]
       CURRENT DATE        = [<現在時刻>]
       
       
      Specified by:
      getSettings in interface RotatePolicy
      Returns:
      設定情報
      See Also:
    • currentDate

      protected Date currentDate()
      現在日時を返す。
      Returns:
      現在日時
    • onWrite

      public void onWrite(String message, Charset charset)
      ログファイル書き込み時に発生するイベント。
      ファイルサイズによるローテーションなどを独自で実装したい場合に使用する。
      Specified by:
      onWrite in interface RotatePolicy
      Parameters:
      message - ログファイルに書き込まれるメッセージ
      charset - 書き込み時に使用する文字エンコーディング
    • onOpenFile

      public void onOpenFile(File file)
      ログファイル読み込み時に発生するイベント。
      ファイルサイズによるローテーションなどを独自で実装したい場合に使用する。
      Specified by:
      onOpenFile in interface RotatePolicy
      Parameters:
      file - 読み込まれたファイル