2016-05-19 53 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的原因。