返回

為原生可執行檔新增日誌功能

預設情況下,由 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)。

與我們聯繫