ネイティブ実行可能ファイルへのロギングの追加

デフォルトでは、ネイティブ・イメージによって生成されたネイティブ実行可能ファイルは、java.util.logging.* APIを介したロギングをサポートしています。

デフォルトのロギング構成

ネイティブ実行可能ファイルのデフォルトのロギング構成は、JDKにあるlogging.propertiesファイルに基づいています。このファイルにより、INFO以上のレベルのメッセージのみを表示するjava.util.logging.ConsoleHandlerが構成されています。カスタム・ロギング構成は、次に説明するように、ビルド時または実行時にロードできます。

追加のロギング・ハンドラが必要な場合は、対応するクラスをリフレクション用に登録する必要があります。たとえば、java.util.logging.FileHandlerを使用する場合は、META-INF/native-image/reachability-metadata.jsonファイルに次のリフレクション構成を指定します:

{
    "name" : "java.util.logging.FileHandler",
    "methods" : [
      { "name" : "<init>", "parameterTypes" : [] },
    ]
  }

詳細は、リフレクションのサポートに関する項を参照してください。

ロガーの使用方法を次の例に示します:

  1. 次のJavaコードをLoggerRunTimeInit.javaという名前のファイルに保存し、コンパイルします:

     import java.io.IOException;
     import java.util.logging.Level;
     import java.util.logging.LogManager;
     import java.util.logging.Logger;
        
     public class LoggerRunTimeInit {
         public static void main(String[] args) throws IOException {
             LogManager.getLogManager().readConfiguration(LoggerRunTimeInit.class.getResourceAsStream("/logging.properties"));
             Logger logger = Logger.getLogger(LoggerRunTimeInit.class.getName());
             logger.log(Level.WARNING, "Danger, Will Robinson!");
         }
     }
    
     javac LoggerRunTimeInit.java
    
  2. logging.propertiesリソース・ファイルをダウンロードし、LoggerRunTimeInit.javaと同じディレクトリに保存します。

  3. ネイティブ実行可能ファイルをビルドして実行します

     native-image LoggerRunTimeInit -H:IncludeResources="logging.properties"
    
     ./loggerruntimeinit
    

    次のような出力が生成されます:

     WARNING: Danger, Will Robinson! [Wed May 18 17:22:40 BST 2022]
    

    この場合、logging.propertiesファイルは実行時の処理に使用可能である必要があるため、META-INF/native-image/reachability-metadata.jsonファイルに登録する必要があります。この実行方法の詳細は、ネイティブ実行可能ファイルでのリソースの使用に関する項を参照してください。