2016-05-19 56 views
0

我有一個使用jetty-runner.jar運行的Java 8 Maven webapp項目。一切正常,除非我無法控制日誌級別(INFO,WARNING,FINE,FINER等)。我使用java.util.logging和OS是Win7。使用jetty-runner時無法控制日誌記錄級別

我已經試過如下:

  • 創建一個logging.properties文件src/main/resources文件夾(在WEB-INF/classes目錄war的結束)。
  • 更名logging.propertiesjetty-logging.properties
  • 使用-Djava.util.logging.config.file=WEB-INF/classes/logging.properties(當文件被如此命名)用命令來運行jetty-runner
    • java -Djava.util.logging.config.file=WEB-INF/classes/logging.prop erties -jar target/dependency/jetty-runner.jar target/xyz.war
  • (在WEB-INF正面配有一塊/)也試過-Djava.util.logging.config.file=/WEB-INF/classes/logging.properties

我的日誌文件很簡單:

.level = WARNING 

我還沒有登錄多前(除了GAE項目)有勾搭,所以不知道我做錯了。

+0

您正在使用相對路徑,那麼您確定工作目錄是您所期望的嗎?嘗試使用logging.properties的絕對路徑。 – jmehrens

+0

我想使用戰爭文件裏面的屬性文件,所以不能使用絕對路徑。 – markvgti

回答

1

由於您試圖從inside of the WAR file加載logging.properties,您必須使用java.util.logging.config.class。根據文檔:

如果設置了「java.util.logging.config.class」屬性,則屬性值將被視爲類名稱。給定的類將被加載,一個對象將被實例化,並且該對象的構造函數負責在初始配置中進行讀取。 (該對象可以使用其他系統屬性來控制其配置。)備用配置類可以使用readConfiguration(InputStream)來定義LogManager中的屬性。

使用該屬性,您可以使用Class.getResourceAsStream來查找WAR文件內部的文件。這裏有一個例子:

package foo.bar.baz; 

import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStream; 
import java.util.logging.LogManager; 

public class JulConfig { 

    /** 
    * Install this as the -Djava.util.logging.config.class=foo.bar.baz.JulConfig 
    * -Djava.util.logging.config.file=WEB-INF/classes/logging.properties 
    * @throws Exception if there is a problem. 
    */ 
    public JulConfig() throws Exception { 
     String key = "java.util.logging.config.file"; 
     String file = System.getProperty(key, "logging.properties"); 
     final InputStream in = JulConfig.class.getResourceAsStream(file); 
     if (in != null) { 
      try { 
       LogManager.getLogManager().readConfiguration(in); 
       //System.clearProperty(key); //Optional. 
      } finally { 
       try { 
        in.close(); 
       } catch (IOException ignore) { 
       } 
      } 
     } else { 
      throw new FileNotFoundException(file); 
     } 
    } 
} 

你所要做的,這是因爲LogManager uses java.io.File定位logging.properties的原因。