Package nablarch.core.log.basic
package nablarch.core.log.basic
フレームワーク実装のログ出力機能を提供する。
-
ClassDescription各種ログのJSON形式による出力に対応した
JsonSerializationManager
の実装クラス。applog用に拡張したMapをJSONにシリアライズするクラス。LogFormatter
の基本実装クラス。
BasicLogFormatterクラスの特徴を下記に示す。
ログに最低限必要な情報(日時、リクエストID、ユーザIDなど)を出力できる。 アプリケーションを起動しているプロセスを識別するために、システムプロパティで指定されたプロセス名をログに出力できる。 オブジェクトを指定してフィールド情報を出力できる。 例外オブジェクトを指定してスタックトレースを出力できる。 フォーマットを設定のみで変更することができる。 BasicLogFormatterは、プレースホルダを使用してフォーマットを指定する。 フォーマットに指定可能なプレースホルダの一覧を下記に示す。起動プロセスを取得するクラス。出力日時を取得するクラス。実行時IDを取得するクラス。オプション情報に指定されたオブジェクトのフィールド情報を取得するクラス。ロガー名を取得するクラス。ログレベルを取得するクラス。メッセージを取得するクラス処理方式を取得するクラス。リクエストIDを取得するクラス。実行時ロガー名を取得するクラス。エラー情報に指定された例外オブジェクトのスタックトレースを取得するクラス。ユーザIDを取得するクラス。Logger
の基本実装クラス。LoggerFactory
の基本実装クラス。
フレームワーク実装の設定は、LoggerManager
が読み込むプロパティファイルに記述する。
プロパティファイルの設定は、システムプロパティを使用して同じキー名に値を指定することで上書きすることができる。
プロパティファイルの記述ルールを下記に示す。
writerNames 使用する全てのLogWriter
の名称。必須。
複数指定する場合はカンマ区切り。
「”writer.” + <ここで指定したLogWriter
の名称>」をキーのプレフィックスにして、LogWriter
毎の設定を行う。 writer.<LogWriter
の名称>.classNameLogWriter
のクラス名。必須。
LogWriter
を実装したクラスのFQCNを指定する。 writer.<LogWriter
の名称>.<プロパティ名>LogWriter
毎のプロパティに設定する値。
設定内容は、使用するLogWriter
のJavadocを参照すること。 availableLoggersNamesOrder 使用する全てのLogger
設定の名称。必須。
複数指定する場合はカンマ区切り。
「”loggers.” + <ここで指定されたLogger
設定の名称>」をキーのプレフィックスに使用して、Logger
設定毎の設定を行う。 loggers.<Logger
設定の名称>.nameRegexLogger
名とのマッチングに使用する正規表現。必須。
正規表現は、Logger
設定の対象となるLogger
を絞り込むために使用する。
Logger
の取得時に指定されたLogger
名 (つまりLoggerManager#get
メソッドの引数に指定されたLogger
名)に対してマッチングを行う。 logger.<Logger
設定の名称>.levelLogLevel
の名称。必須。
LogLevel
の名称を指定する。
ここで指定したレベル以上のログを全て出力する。 logger.<Logger
設定の名称>.writerNamesLogWriter
の名称。必須。
複数指定する場合はカンマ区切り。
ここで指定した全てのLogWriter
に対してログの書き込みを行う。 availableLoggersNamesOrderプロパティは、記述順に意味があるので注意すること。
Logger
の取得では、ログ出力を行うクラスが指定したLogger
名に対して、 ここに記述した順番でLogger
のマッチングを行い、最初にマッチしたLogger
を返す。
そのため、availableLoggersNamesOrderプロパティは、より限定的な正規表現を指定したLogger
から順に記述すること。
初期処理完了後に、各LogWriter
に対して、出力されるログレベルの書き込みを行う。
初期処理完了後の出力例を下記に示す。日時でログのローテーションを行うクラス。
ログ書き込み時の現在日時 >= 保持している次回ローテーション日時の場合、ローテーションを行う。ファイルにログを書き込むクラス。
FileLogWriterクラスの特徴を下記に示す。
ログフォーマッタを設定で指定できる。 設定されたクラスに従いログファイルのローテーションを行うことができる。 初期処理と終了処理、ログファイルの切り替え時に、書き込み先のログファイルにINFOレベルでメッセージを出力する。 本クラスでは、ファイルへのログ書き込みにBufferedOutputStream
を使用する。
出力バッファのサイズは設定で変更できる。
書き込み処理では、書き込み後にすぐにフラッシュし、書き込んだ内容をファイルに反映する。
プロパティファイルの記述ルールを下記に示す。
filePath 書き込み先のファイルパス。必須。 encoding 書き込み時に使用する文字エンコーディング。オプション。
指定しなければシステムプロパティ(file.encoding)から取得した文字エンコーディング。 outputBufferSize 出力バッファのサイズ。オプション。
単位はキロバイト。1000バイトを1キロバイトと換算する。1以上を指定する。指定しなければ8KB。 rotatePolicy ファイルローテーション実行クラスのFQCNを指定する。オプション。
RotatePolicy
が実装されたクラスのFQCNを指定する。
デフォルトではFileSizeRotatePolicy
が使用される。
利用するローテーション実行クラス毎に、追加でプロパティの設定が必要となる。 本クラスでは、初期処理と終了処理、ログファイルの切り替え時に、書き込み先のログファイルにINFOレベルでメッセージを出力する。ファイルサイズによるログのローテーションを行うクラス。
設定したファイルの最大サイズを超える場合にローテーションを行う。 ファイルの最大サイズが指定されていない場合は、ローテーションしない。ログのフォーマットエラー出力を処理するインターフェース。起動プロセスを処理するクラス。出力日時を処理するクラス。実行時IDを処理するクラス。ロガー名を処理するクラス。ログレベルを処理するクラス。メッセージを処理するクラス。オプション情報に指定されたオブジェクトを処理するクラス。処理方式を処理するクラス。リクエストIDを処理するクラス。実行時ロガー名を処理するクラス。エラー情報に指定された例外オブジェクトのスタックトレースを処理するクラス。ユーザIDを処理するクラス。JsonLogObjectBuilder<CTX>構造化ログのオブジェクトを構築するインターフェース。ログ出力に必要な情報を保持するクラス。
スレッド名、ユーザID、リクエストIDは、スレッドに紐付く値をクラスの内部で設定する。ログのフォーマットを行うインタフェース。
ログのフォーマットの種類毎に本インタフェースの実装クラスを作成する。ログレベルを表す列挙型。
本フレームワークにおけるログレベルは、FATAL>ERROR>WARN>INFO>DEBUG>TRACEの6段階とし、FATALからTRACEに向かって順にレベルが低くなる。
レベルに応じた出力制御では、指定されたレベル以上のログを全て出力する。
例えば、WARNレベルが指定された場合は、FATALレベル,ERRORレベル,WARNレベルで出力を指示しているログのみ出力する。
ログレベルの定義を下記に示す。
下記を参考にプロジェクト毎にログレベルの使用方法を決定すること。 FATAL アプリケーションの継続が不可能になる深刻な問題が発生したことを示す。
監視が必須で即通報および即対応が必要となる。
通常は、運用監視体制と密接に関わるため、個別アプリケーションではなくフレームワークで出力する。 ERROR アプリケーションの継続に支障をきたす問題が発生したことを示す。
監視が必須であるが、通報および対応にFATALレベルほどの緊急性がない。
通常は、運用監視体制と密接に関わるため、個別アプリケーションではなくフレームワークで出力する。 WARN すぐには影響を与えないが、放置しておくとアプリケーションの継続に支障をきたす問題になる恐れがある事象が発生したことを示す。
できれば監視した方がよいが、ERRORレベルほどの重要性がない。
通常は、運用監視体制と密接に関わるため、個別アプリケーションではなくフレームワークで出力する。 INFO 本番運用時にアプリケーションの情報を出力するログレベル。
アクセスログや統計ログが該当する。
通常は、運用監視体制と密接に関わるため、個別アプリケーションではなくフレームワークで出力する。
ログファイルのサイズが肥大化しないよう出力内容を設計する。 DEBUG 開発時にデバッグ情報を出力するログレベル。
SQLログや性能ログが該当する。
本番運用時は、ログファイルのサイズが肥大化するため出力してはならない。 TRACE 開発時にデバッグ情報より、さらに細かい情報を出力したい場合に使用するログレベル。
本番運用時は、ログファイルのサイズが肥大化するため出力してはならない。LogPublisher
によって公開されたLogContext
を受け取るインタフェース。書き出されたログを、登録されたLogListener
に公開するLogWriter
の実装クラス。ログを出力先に書き込むインタフェース。
出力先の媒体毎に本インタフェースの実装クラスを作成する。LogWriter
の実装をサポートするクラス。
このクラスでは、下記の機能を提供する。LogLevel
に応じた出力制御LogFormatter
を使用したログのフォーマット 上記の機能は、プロパティファイルに設定を記述して使用する。
プロパティファイルの記述ルールを下記に示す。 writer.<LogWriter
の名称>.levelLogLevel
の名称。オプション。
LogLevel
の名称を指定する。
ここで指定したレベル以上のログを全て出力する。 指定がない場合はレベルに応じた出力制御を行わず、全てのレベルのログを出力する。 writer.<LogWriter
の名称>.formatter.classNameLogWriter
で使用するLogFormatter
のクラス名。
LogFormatter
を実装したクラスのFQCNを指定する。 指定がない場合はBasicLogFormatter
を使用する。 writer.<LogWriter
の名称>.formatter.<プロパティ名>LogFormatter
毎のプロパティに設定する値。
設定内容は、使用するLogFormatter
のJavadocを参照すること。ログ出力機能の設定からオブジェクトに対する設定を抜き出して保持するクラス。Jsonのobjectへの埋め込み用クラス。ログのローテーションを行うインタフェース。
ログのローテーションの種類毎に本インタフェースの実装クラスを作成する。フォーマットエラーを標準エラーに出力するクラス。標準出力にログを書き込むクラス。
開発時にコンソール上で出力されたログを確認する場合などに使用できる。ロックファイルを用いて排他制御を行いながらファイルにログを書き込むクラス。