返回

为本机可执行文件添加日志功能

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

默认日志配置

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

如果您需要额外的日志处理程序,则必须注册相应的类以进行反射。例如,如果您使用 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 文件中。有关如何执行此操作的更多详细信息,请参阅本机可执行文件中的资源使用

联系我们