モジュール java.base
パッケージ java.lang

クラスSystem.LoggerFinder

  • 含まれているクラス:
    System

    public abstract static class System.LoggerFinder
    extends Object
    LoggerFinderサービスは、使用する基礎となるフレームワークへのロガーの作成、管理、および構成を担当します。 ロガー・ファインダは、このクラスの具体的な実装であり、引数のないコンストラクタを持ち、このクラスで定義された抽象メソッドを実装します。 ロガー・ファインダから返されたロガーは、このプロバイダがサポートするロギング・バックエンドにログ・メッセージをルーティングすることができます。 Java Runtimeの呼び出しによって、次のようにロードされる単一のシステム全体のLoggerFinderインスタンスが維持されます:
    • 最初に、「システム・クラス・ローダー」を使用してServiceLoader機能を使用してカスタムLoggerFinderプロバイダを検索します。
    • LoggerFinderプロバイダが見つからない場合、システムのデフォルトのLoggerFinder実装が使用されます。

    アプリケーションは、System.LoggerFinderサービスの実装を提供して宣言するだけで、ログ・バックエンド「java.loggingモジュールが存在する場合でも」を置き換えることができます。

    デフォルトの実装

    システムのデフォルトLoggerFinder実装では、java.loggingモジュールが存在する場合、バックエンド・フレームワークとしてjava.util.loggingが使用されます。 ログ・メッセージをjava.util.logging.Loggerにルーティングするloggerインスタンスを返します。 それ以外の場合、java.loggingが存在しない場合、デフォルトの実装では、INFOレベル以上のログ・メッセージをコンソール(System.err)にルーティングする単純なロガー・インスタンスが返されます。

    ロギング構成

    LoggerFinderファクトリ・メソッドから取得されたLoggerインスタンスは、アプリケーションによって直接構成できません。 構成は基本となるロギング・バックエンドの責任であり、通常はそのバックエンドに固有のAPIを使用する必要があります。

    バックエンドとしてjava.util.loggingを使用するデフォルトのLoggerFinder実装については、ログ構成用のjava.util.loggingを参照してください。 java.loggingモジュールが存在しないときに単純なロガーを返すデフォルトのLoggerFinder実装では、構成は実装に依存します。

    通常、ロギング・フレームワークを使用するアプリケーションは、そのフレームワークによって定義されたロガー・ファサード(またはサポートされている)を介してメッセージをロギングします。 外部フレームワークを使用するアプリケーションは、そのフレームワークに関連付けられたファサードを介してログに記録する必要があります。

    メッセージをログに記録する必要のあるシステム・クラスは、通常、アプリケーションによって選択されたログ・フレームワークにメッセージをルーティングするためにSystem.Loggerインスタンスを取得します。

    ログ・メッセージを生成するためだけにロガーを必要とするライブラリとクラスは、LoggerFinderサービスの特定の実装に依存するように、ロガーを単独で構成しようとするべきではありません。

    さらに、セキュリティ・マネージャが存在する場合、システム・クラスに提供されるロガーは、アクセス権を必要とせずにロギング・バックエンドを通じて直接構成することはできません。
    このようなロガーで実行される構成は、通常、同じJavaランタイム内のすべてのアプリケーションに影響するため、これらのロガーが信頼できないコードによって構成されていないことを確認するのは、具体的なLoggerFinder実装のプロバイダの責任です。

    メッセージレベルとバックエンド・レベルへのマッピング

    ロガー・ファインダは、 System.Logger.Levelからそれが使用するロギング・バックエンドによってサポートされるレベルへのマッピングを担当します。
    バックエンドとしてjava.util.loggingを使用するデフォルトのLoggerFinderは、System.Loggerレベルを、対応する重大度のjava.util.loggingレベルにマップします(Logger.Levelで説明されています)。

    導入されたバージョン:
    9
    関連項目:
    System, System.Logger
    • コンストラクタの詳細

      • LoggerFinder

        protected LoggerFinder()
        LoggerFinderの新しいインスタンスを作成します。
        実装上の注意:
        LoggerFinderサービスの実装では、サービス・プロバイダのインスタンス化中にデッドロックやクラス・ロード・サイクルのリスクを回避するため、コンストラクタで重い初期化を実行しないことをお勧めします。
        例外:
        SecurityException - セキュリティ・マネージャが存在し、そのcheckPermissionメソッドがRuntimePermission("loggerFinder")を許可しない場合。
    • メソッドの詳細

      • getLogger

        public abstract System.Logger getLogger​(String name,
                                                Module module)
        与えられたmoduleLoggerのインスタンスを返します。
        パラメータ:
        name - ロガーの名前。
        module - ロガーがリクエストされているモジュール。
        戻り値:
        指定されたモジュール内での使用に適したlogger
        例外:
        NullPointerException - namenullまたはmodulenullの場合。
        SecurityException - セキュリティ・マネージャが存在し、そのcheckPermissionメソッドがRuntimePermission("loggerFinder")を許可しない場合。
      • getLocalizedLogger

        public System.Logger getLocalizedLogger​(String name,
                                                ResourceBundle bundle,
                                                Module module)
        指定されたmoduleLoggerのローカライズ可能なインスタンスを返します。 返されたロガーは、メッセージのローカライズに提供されたリソース・バンドルを使用します。
        実装要件:
        デフォルトでは、このメソッドはthis.getLogger(name, module)を呼び出してロガーを取得し、そのロガーをSystem.Loggerインスタンスにラップします。ここで、ResourceBundleをパラメータとして使用しないすべてのメソッドは、 - ローカリゼーションのために与えられたbundleを渡します。 たとえば、Logger.log(Level.INFO, msg)の呼び出しは、ラップされたロガー・インスタンスのLogger.log(Level.INFO, bundle, msg, (Object[])null)への呼び出しとして終了します。 ただし、デフォルトでは、Supplier<String>によって返される文字列メッセージはローカライズされません。そのような文字列は、リソース・バンドル内のキーではなく、すでに構築されているメッセージであると想定されるためです。

        LoggerFinderの実装では、このメソッドをオーバーライドすることができます。たとえば、基になるロギング・バックエンドがログ・メッセージをローカライズするための独自のメカニズムを提供する場合、バックエンドによって提供されるメカニズムを直接使用するロガーをLoggerFinderで自由に返すことができます。

        パラメータ:
        name - ロガーの名前。
        bundle - リソース・バンドル。nullにすることができます。
        module - ロガーがリクエストされているモジュール。
        戻り値:
        Loggerのインスタンス。メッセージのローカライズに提供されたリソース・バンドルを使用します。
        例外:
        NullPointerException - namenullまたはmodulenullの場合。
        SecurityException - セキュリティ・マネージャが存在し、そのcheckPermissionメソッドがRuntimePermission("loggerFinder")を許可しない場合。
      • getLoggerFinder

        public static System.LoggerFinder getLoggerFinder()
        LoggerFinderインスタンスを返します。 Java Runtimeには、システム全体で1つのLoggerFinderインスタンスが1つあります。 LoggerFinder実装がどのように配置されてロードされているかのクラス仕様を参照してください。
        戻り値:
        LoggerFinderインスタンス。
        例外:
        SecurityException - セキュリティ・マネージャが存在し、そのcheckPermissionメソッドがRuntimePermission("loggerFinder")を許可しない場合。