戻る

ネイティブ実行可能ファイルにロギングを追加する

既定では、ネイティブイメージが生成するネイティブ実行可能ファイルは、java.util.logging.* API によるロギングをサポートしています。

既定のロギング設定

ネイティブ実行可能ファイルでの既定のロギング設定は、JDK にある logging.properties ファイルをベースとしています。このファイルは java.util.logging.ConsoleHandler を設定しますが、この Handler は INFO レベル以上のメッセージのみを表示します。カスタムロギング設定は、以下で説明するように、ビルド時または実行時にロードできます。

追加のロギング Handler が必要な場合は、リフレクション用に対応するクラスを登録する必要があります。たとえば、java.util.logging.FileHandler を使用する場合は、次のリフレクション設定を指定します。

{
    "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 ファイルを実行時処理で使用できるようにする必要があります。そのため、reachability-metadata.json ファイルを _META-INF/native-image/_ フォルダーの下に含める必要があります。これを行う方法の詳細については、[ネイティブ実行可能ファイルでのリソースの使用](/latest/reference-manual/native-image/metadata/#resources)を参照してください。

当社とつながる