Package nablarch.core.log.basic


package nablarch.core.log.basic
フレームワーク実装のログ出力機能を提供する。
  • Class
    Description
    各種ログのJSON形式による出力に対応したJsonSerializationManagerの実装クラス。
    applog用に拡張したMapをJSONにシリアライズするクラス。
    LogFormatterの基本実装クラス。

    BasicLogFormatterクラスの特徴を下記に示す。
    ログに最低限必要な情報(日時、リクエストID、ユーザIDなど)を出力できる。 アプリケーションを起動しているプロセスを識別するために、システムプロパティで指定されたプロセス名をログに出力できる。 オブジェクトを指定してフィールド情報を出力できる。 例外オブジェクトを指定してスタックトレースを出力できる。 フォーマットを設定のみで変更することができる。 BasicLogFormatterは、プレースホルダを使用してフォーマットを指定する。 フォーマットに指定可能なプレースホルダの一覧を下記に示す。
    起動プロセスを取得するクラス。
    出力日時を取得するクラス。
    実行時IDを取得するクラス。
    オプション情報に指定されたオブジェクトのフィールド情報を取得するクラス。
    ロガー名を取得するクラス。
    ログレベルを取得するクラス。
    メッセージを取得するクラス
    処理方式を取得するクラス。
    リクエストIDを取得するクラス。
    実行時ロガー名を取得するクラス。
    エラー情報に指定された例外オブジェクトのスタックトレースを取得するクラス。
    ユーザIDを取得するクラス。
    Loggerの基本実装クラス。
    LoggerFactoryの基本実装クラス。

    フレームワーク実装の設定は、LoggerManagerが読み込むプロパティファイルに記述する。
    プロパティファイルの設定は、システムプロパティを使用して同じキー名に値を指定することで上書きすることができる。

    プロパティファイルの記述ルールを下記に示す。
    writerNames 使用する全てのLogWriterの名称。必須。
    複数指定する場合はカンマ区切り。
    「”writer.” + <ここで指定したLogWriterの名称>」をキーのプレフィックスにして、LogWriter毎の設定を行う。 writer.<LogWriterの名称>.className LogWriterのクラス名。必須。
    LogWriterを実装したクラスのFQCNを指定する。 writer.<LogWriterの名称>.<プロパティ名> LogWriter毎のプロパティに設定する値。
    設定内容は、使用するLogWriterのJavadocを参照すること。 availableLoggersNamesOrder 使用する全てのLogger設定の名称。必須。
    複数指定する場合はカンマ区切り。
    「”loggers.” + <ここで指定されたLogger設定の名称>」をキーのプレフィックスに使用して、Logger設定毎の設定を行う。 loggers.<Logger設定の名称>.nameRegex Logger名とのマッチングに使用する正規表現。必須。
    正規表現は、Logger設定の対象となるLoggerを絞り込むために使用する。
    Loggerの取得時に指定されたLogger名 (つまりLoggerManager#getメソッドの引数に指定されたLogger名)に対してマッチングを行う。 logger.<Logger設定の名称>.level LogLevelの名称。必須。
    LogLevelの名称を指定する。
    ここで指定したレベル以上のログを全て出力する。 logger.<Logger設定の名称>.writerNames LogWriterの名称。必須。
    複数指定する場合はカンマ区切り。
    ここで指定した全ての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レベルでメッセージを出力する。
    ファイルサイズによるログのローテーションを行うクラス。
    設定したファイルの最大サイズを超える場合にローテーションを行う。 ファイルの最大サイズが指定されていない場合は、ローテーションしない。
    ログのフォーマットエラー出力を処理するインターフェース。
    LogFormatterのJSON形式フォーマット実装クラス。

    JsonLogFormatterは、出力項目を指定してフォーマットを指定する。 出力項目の一覧を下記に示す。
    起動プロセスを処理するクラス。
    出力日時を処理するクラス。
    実行時IDを処理するクラス。
    ロガー名を処理するクラス。
    ログレベルを処理するクラス。
    メッセージを処理するクラス。
    オプション情報に指定されたオブジェクトを処理するクラス。
    処理方式を処理するクラス。
    リクエストIDを処理するクラス。
    実行時ロガー名を処理するクラス。
    エラー情報に指定された例外オブジェクトのスタックトレースを処理するクラス。
    ユーザIDを処理するクラス。
    構造化ログのオブジェクトを構築するインターフェース。
    ログ出力に必要な情報を保持するクラス。
    スレッド名、ユーザID、リクエストIDは、スレッドに紐付く値をクラスの内部で設定する。
    ログのフォーマットを行うインタフェース。

    ログのフォーマットの種類毎に本インタフェースの実装クラスを作成する。
    ログレベルを表す列挙型。

    本フレームワークにおけるログレベルは、FATAL>ERROR>WARN>INFO>DEBUG>TRACEの6段階とし、FATALからTRACEに向かって順にレベルが低くなる。

    レベルに応じた出力制御では、指定されたレベル以上のログを全て出力する。
    例えば、WARNレベルが指定された場合は、FATALレベル,ERRORレベル,WARNレベルで出力を指示しているログのみ出力する。

    ログレベルの定義を下記に示す。
    下記を参考にプロジェクト毎にログレベルの使用方法を決定すること。 FATAL アプリケーションの継続が不可能になる深刻な問題が発生したことを示す。
    監視が必須で即通報および即対応が必要となる。
    通常は、運用監視体制と密接に関わるため、個別アプリケーションではなくフレームワークで出力する。 ERROR アプリケーションの継続に支障をきたす問題が発生したことを示す。
    監視が必須であるが、通報および対応にFATALレベルほどの緊急性がない。
    通常は、運用監視体制と密接に関わるため、個別アプリケーションではなくフレームワークで出力する。 WARN すぐには影響を与えないが、放置しておくとアプリケーションの継続に支障をきたす問題になる恐れがある事象が発生したことを示す。
    できれば監視した方がよいが、ERRORレベルほどの重要性がない。
    通常は、運用監視体制と密接に関わるため、個別アプリケーションではなくフレームワークで出力する。 INFO 本番運用時にアプリケーションの情報を出力するログレベル。
    アクセスログや統計ログが該当する。
    通常は、運用監視体制と密接に関わるため、個別アプリケーションではなくフレームワークで出力する。
    ログファイルのサイズが肥大化しないよう出力内容を設計する。 DEBUG 開発時にデバッグ情報を出力するログレベル。
    SQLログや性能ログが該当する。
    本番運用時は、ログファイルのサイズが肥大化するため出力してはならない。 TRACE 開発時にデバッグ情報より、さらに細かい情報を出力したい場合に使用するログレベル。
    本番運用時は、ログファイルのサイズが肥大化するため出力してはならない。
    LogLevelを表す文言を提供するクラス。

    LogLevelを表す文言をLogFormatterの設定から取得する。
    設定がない場合は、LogLevelの名称を使用する。

    プロパティファイルの記述ルールを下記に示す。 label.<LogLevelの名称の小文字> LogLevelに使用するラベル。オプション。
    指定しなければLogLevelの名称を使用する。
    LogPublisherによって公開されたLogContextを受け取るインタフェース。
    書き出されたログを、登録されたLogListenerに公開するLogWriterの実装クラス。
    ログを出力先に書き込むインタフェース。

    出力先の媒体毎に本インタフェースの実装クラスを作成する。
    LogWriterの実装をサポートするクラス。

    このクラスでは、下記の機能を提供する。 LogLevelに応じた出力制御 LogFormatterを使用したログのフォーマット 上記の機能は、プロパティファイルに設定を記述して使用する。
    プロパティファイルの記述ルールを下記に示す。 writer.<LogWriterの名称>.level LogLevelの名称。オプション。
    LogLevelの名称を指定する。
    ここで指定したレベル以上のログを全て出力する。 指定がない場合はレベルに応じた出力制御を行わず、全てのレベルのログを出力する。 writer.<LogWriterの名称>.formatter.className LogWriterで使用するLogFormatterのクラス名。
    LogFormatterを実装したクラスのFQCNを指定する。 指定がない場合はBasicLogFormatterを使用する。 writer.<LogWriterの名称>.formatter.<プロパティ名> LogFormatter毎のプロパティに設定する値。
    設定内容は、使用するLogFormatterのJavadocを参照すること。
    ログ出力機能の設定からオブジェクトに対する設定を抜き出して保持するクラス。
    Jsonのobjectへの埋め込み用クラス。
    ログのローテーションを行うインタフェース。
    ログのローテーションの種類毎に本インタフェースの実装クラスを作成する。
    フォーマットエラーを標準エラーに出力するクラス。
    標準出力にログを書き込むクラス。

    開発時にコンソール上で出力されたログを確認する場合などに使用できる。
    ロックファイルを用いて排他制御を行いながらファイルにログを書き込むクラス。