返回

在原生可执行文件中添加日志

默认情况下,由 Native Image 生成的原生可执行文件通过java.util.logging.* API 支持日志记录。

默认日志记录配置

原生可执行文件中的默认日志记录配置基于 JDK 中的logging.properties文件。此文件配置了一个java.util.logging.ConsoleHandler,它只显示INFO级别及以上的日志消息。自定义日志记录配置可以在构建时或运行时加载,如下所述。

如果您需要额外的日志记录处理程序,则必须注册相应的反射类。例如,如果您使用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文件需要在运行时处理,因此必须包含在_META-INF/native-image/下的reachability-metadata.json文件中。_文件夹。有关如何执行此操作的更多详细信息,请参见[原生可执行文件中的资源使用](/latest/reference-manual/native-image/metadata/#resources)。

联系我们