ネイティブ実行可能ファイルへのロギングの追加
デフォルトでは、ネイティブ・イメージによって生成されたネイティブ実行可能ファイルは、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" : [] },
]
}
詳細は、リフレクションのサポートに関する項を参照してください。
ロガーの使用方法を次の例に示します:
-
次の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
-
logging.propertiesリソース・ファイルをダウンロードし、LoggerRunTimeInit.javaと同じディレクトリに保存します。
-
ネイティブ実行可能ファイルをビルドして実行します
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ファイルに登録する必要があります。この実行方法の詳細は、ネイティブ実行可能ファイルでのリソースの使用に関する項を参照してください。