public class SynchronousFileLogWriter extends FileLogWriter
本クラスを使用するとプロセスをまたがってログ出力処理を直列化できるので、複数プロセスから同一のファイルにログ出力を行う場合でも確実にログを出力できる。
本クラスは障害通知ログのように出力頻度が低く、かつサーバ単位でログファイルを一元管理するほうが効率的なログの出力にのみ使用することを想定している。
頻繁にログの出力が行われる場面で本クラスを使用するとロック取得待ちによって性能が劣化する可能性があるので、
アプリケーションログやアクセスログのように出力頻度の高いログの出力に本クラスを使用してはいけない。
本クラスはロック取得の待機時間を超えてもロックを取得できない場合、
強制的にロックファイルを削除し、ロックファイルを生成してからログの出力を行う。
もし強制的にロックファイルを削除できない場合は、ロックを取得していない状態で強制的にログの出力を行い、処理を終了する。
また、ロックファイルの生成に失敗した場合および、ロック取得待ちの際に割り込みが発生した場合も、ロックを取得していない状態で強制的にログの出力を行い、処理を終了する。
コンストラクタと説明 |
---|
SynchronousFileLogWriter() |
修飾子とタイプ | メソッドと説明 |
---|---|
protected boolean |
deleteLockFileExceedsLockWaitTime(java.io.File lockFile,
java.lang.String formattedMessage,
LogContext context)
待機時間を過ぎても残存しているロックファイルを強制的に削除する。
|
protected void |
forceWrite(java.lang.String formattedMessage,
LogContext context,
java.lang.String lockErrorMessage)
ロック取得に失敗した場合に、強制的にログ出力を行う。
|
protected java.lang.String |
getSettings()
設定情報を取得する。
|
protected boolean |
lockFile(java.lang.String formattedMessage,
LogContext context)
ロックファイルを作成し、ログファイルをロックする。
|
protected void |
onInitialize(ObjectSettings settings)
初期処理を行う。
|
protected void |
onWrite(java.lang.String formattedMessage,
LogContext context)
ロックファイルを使用して排他制御を行いながらファイルにログ書き込みを行う。
|
protected void |
releaseLock(java.lang.String formattedMessage,
LogContext context)
ログ出力後に、ロックを解放する。
|
protected boolean |
waitLock(java.io.File lockFile,
java.lang.String formattedMessage,
LogContext context)
ロック待ち処理を行う。
|
void |
write(LogContext context)
フォーマット済みのログを出力先に書き込む。
|
onTerminate, onWrite
createLogFormatter, getFormatter, getName, initialize, needsToWrite, terminate
protected void onInitialize(ObjectSettings settings)
onInitialize
クラス内 FileLogWriter
settings
- LogWriter
の設定内容protected java.lang.String 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 = [<ロック待ちでスレッドをスリープしている際に、割り込みが発生した場合の障害コード>]
getSettings
クラス内 FileLogWriter
FileLogWriter.getSettings()
,
LogLevel
public void write(LogContext context)
LogLevel
が指定されている場合は、有効なレベルの場合のみLogWriterSupport.onWrite(String)
メソッドを呼び出す。write
インタフェース内 LogWriter
write
クラス内 LogWriterSupport
context
- LogContext
protected void onWrite(java.lang.String formattedMessage, LogContext context)
formattedMessage
- フォーマット済みのログcontext
- ログエントリオブジェクトprotected boolean lockFile(java.lang.String formattedMessage, LogContext context)
formattedMessage
- フォーマット済みのログcontext
- ログエントリオブジェクトprotected boolean waitLock(java.io.File lockFile, java.lang.String formattedMessage, LogContext context)
lockFile
- ロックファイルformattedMessage
- フォーマット済みのログcontext
- ログエントリオブジェクトprotected boolean deleteLockFileExceedsLockWaitTime(java.io.File lockFile, java.lang.String formattedMessage, LogContext context)
lockFile
- ロックファイルformattedMessage
- フォーマット済みのログcontext
- ログエントリオブジェクトprotected void forceWrite(java.lang.String formattedMessage, LogContext context, java.lang.String lockErrorMessage)
formattedMessage
- フォーマット済みのログcontext
- ログエントリオブジェクトlockErrorMessage
- ロック取得に失敗した原因のログprotected void releaseLock(java.lang.String formattedMessage, LogContext context)
formattedMessage
- フォーマット済みのログ(本メソッドでは使用していない)context
- ログエントリオブジェクト