Package nablarch.core.log.basic
Class SynchronousFileLogWriter
java.lang.Object
nablarch.core.log.basic.LogWriterSupport
nablarch.core.log.basic.FileLogWriter
nablarch.core.log.basic.SynchronousFileLogWriter
- All Implemented Interfaces:
LogWriter
ロックファイルを用いて排他制御を行いながらファイルにログを書き込むクラス。
本クラスを使用するとプロセスをまたがってログ出力処理を直列化できるので、複数プロセスから同一のファイルにログ出力を行う場合でも確実にログを出力できる。
本クラスは障害通知ログのように出力頻度が低く、かつサーバ単位でログファイルを一元管理するほうが効率的なログの出力にのみ使用することを想定している。
頻繁にログの出力が行われる場面で本クラスを使用するとロック取得待ちによって性能が劣化する可能性があるので、
アプリケーションログやアクセスログのように出力頻度の高いログの出力に本クラスを使用してはいけない。
本クラスはロック取得の待機時間を超えてもロックを取得できない場合、
強制的にロックファイルを削除し、ロックファイルを生成してからログの出力を行う。
もし強制的にロックファイルを削除できない場合は、ロックを取得していない状態で強制的にログの出力を行い、処理を終了する。
また、ロックファイルの生成に失敗した場合および、ロック取得待ちの際に割り込みが発生した場合も、ロックを取得していない状態で強制的にログの出力を行い、処理を終了する。
- Author:
- Masato Inoue
-
Field Summary
Fields inherited from class nablarch.core.log.basic.FileLogWriter
KB
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected boolean
deleteLockFileExceedsLockWaitTime
(File lockFile, String formattedMessage, LogContext context) 待機時間を過ぎても残存しているロックファイルを強制的に削除する。protected void
forceWrite
(String formattedMessage, LogContext context, String lockErrorMessage) ロック取得に失敗した場合に、強制的にログ出力を行う。protected String
設定情報を取得する。
設定情報のフォーマットを下記に示す。
protected boolean
lockFile
(String formattedMessage, LogContext context) ロックファイルを作成し、ログファイルをロックする。protected void
onInitialize
(ObjectSettings settings) 初期処理を行う。
ログの出力先に応じたリソースの確保などを実装する。
デフォルト実装では何もしない。protected void
onWrite
(String formattedMessage, LogContext context) ロックファイルを使用して排他制御を行いながらファイルにログ書き込みを行う。protected void
releaseLock
(String formattedMessage, LogContext context) ログ出力後に、ロックを解放する。protected boolean
waitLock
(File lockFile, String formattedMessage, LogContext context) ロック待ち処理を行う。void
write
(LogContext context) フォーマット済みのログを出力先に書き込む。
設定でLogLevel
が指定されている場合は、有効なレベルの場合のみLogWriterSupport.onWrite(String)
メソッドを呼び出す。
有効なレベルのログでない場合は、何も処理しない。Methods inherited from class nablarch.core.log.basic.FileLogWriter
onTerminate, onWrite
Methods inherited from class nablarch.core.log.basic.LogWriterSupport
createLogFormatter, getFormatter, getName, initialize, needsToWrite, terminate
-
Constructor Details
-
SynchronousFileLogWriter
public SynchronousFileLogWriter()
-
-
Method Details
-
onInitialize
初期処理を行う。
ログの出力先に応じたリソースの確保などを実装する。
デフォルト実装では何もしない。 プロパティファイルで指定された設定情報を取得し、ファイルへの書き込みを行う出力ストリームを初期化する。
初期処理完了後、INFOレベルで設定情報を出力する。- Overrides:
onInitialize
in classFileLogWriter
- Parameters:
settings
-LogWriter
の設定内容
-
getSettings
設定情報を取得する。
設定情報のフォーマットを下記に示す。
WRITER NAME = [<{@link LogWriter}の名称>] WRITER CLASS = [<{@link LogWriter}のクラス名>] FORMATTER CLASS = [<{@link LogFormatter}のクラス名>] LEVEL = [<ログの出力制御の基準とするLogLevel>] FILE PATH = [<書き込み先のファイルパス>] ENCODING = [<書き込み時に使用する文字エンコーディング>] OUTPUT BUFFER SIZE = [<出力バッファのサイズ>] FILE AUTO CHANGE = [<ログファイルを自動で切り替えるか否か。>] MAX FILE SIZE = [<書き込み先ファイルの最大サイズ>] CURRENT FILE SIZE = [<書き込み先ファイルの現在のサイズ>] LOCK FILE PATH = [<ロックファイルのパス>] LOCK RETRY INTERVAL = [<ロック取得の再試行間隔(ミリ秒)>] LOCK WAIT TIME = [<ロック取得の待機時間(ミリ秒)>] FAILURE CODE CREATE LOCK FILE = [<生成したロックファイルを削除できない場合の障害コード>] FAILURE CODE RELEASE LOCK FILE = [<生成したロックファイルを解放(削除)できない場合の障害コード>] FAILURE CODE FORCE DELETE LOCK FILE = [<解放されないロックファイルを強制削除できない場合の障害コードド>] FAILURE CODE INTERRUPT LOCK WAIT = [<ロック待ちでスレッドをスリープしている際に、割り込みが発生した場合の障害コード>]
- Overrides:
getSettings
in classFileLogWriter
- Returns:
- 設定情報
- See Also:
-
write
フォーマット済みのログを出力先に書き込む。
設定でLogLevel
が指定されている場合は、有効なレベルの場合のみLogWriterSupport.onWrite(String)
メソッドを呼び出す。
有効なレベルのログでない場合は、何も処理しない。- Specified by:
write
in interfaceLogWriter
- Overrides:
write
in classLogWriterSupport
- Parameters:
context
-LogContext
-
onWrite
ロックファイルを使用して排他制御を行いながらファイルにログ書き込みを行う。 排他制御の仕様を以下に示す。- ロックファイルの生成に成功した場合、ログ書き込みを行い、ロックファイルを削除する。
- ファイルパス不正などでロックファイルの生成に失敗した場合、引数で渡されたメッセージとロックファイルが作成できなかった旨のメッセージを、強制的にログファイルに出力する。
- 既にロックファイルが存在するためにロックファイルの生成に失敗した場合、一定時間処理をスリープさせ、再試行する。
- ロック取得待機時間を超えてもロックファイルを生成できなかった場合、不要なロックファイルが残存しているとみなしロックファイルを削除し、再度ロックファイルの生成を試みる。 もしロックファイルの削除に失敗した場合、引数で渡されたメッセージとロックファイルの削除に失敗した旨のメッセージを、強制的にログファイルに出力する。
- ロック取得待ちの際に割り込みが発生した場合、引数で渡されたメッセージと割り込みが発生した旨のメッセージを、強制的にログファイルに出力する。
- Parameters:
formattedMessage
- フォーマット済みのログcontext
- ログエントリオブジェクト
-
lockFile
ロックファイルを作成し、ログファイルをロックする。- Parameters:
formattedMessage
- フォーマット済みのログcontext
- ログエントリオブジェクト- Returns:
- ロックファイルの作成結果(true:成功 false:失敗)
-
waitLock
ロック待ち処理を行う。 ロック取得の再試行間隔(ミリ秒)で設定された時間、スレッドをスリープさせる。- Parameters:
lockFile
- ロックファイルformattedMessage
- フォーマット済みのログcontext
- ログエントリオブジェクト- Returns:
- もし割り込みが発生した場合にはfalse
-
deleteLockFileExceedsLockWaitTime
protected boolean deleteLockFileExceedsLockWaitTime(File lockFile, String formattedMessage, LogContext context) 待機時間を過ぎても残存しているロックファイルを強制的に削除する。- Parameters:
lockFile
- ロックファイルformattedMessage
- フォーマット済みのログcontext
- ログエントリオブジェクト- Returns:
- ロックファイルの強制削除が正常に終了したかどうか
-
forceWrite
ロック取得に失敗した場合に、強制的にログ出力を行う。- Parameters:
formattedMessage
- フォーマット済みのログcontext
- ログエントリオブジェクトlockErrorMessage
- ロック取得に失敗した原因のログ
-
releaseLock
ログ出力後に、ロックを解放する。 ロックの解放処理は、ロックファイルを削除することによって行う。- Parameters:
formattedMessage
- フォーマット済みのログ(本メソッドでは使用していない)context
- ログエントリオブジェクト
-