2015-01-09 9 views
10

これは私のweb.xmlです:ステータスが500のときにジャージーにエラーログが記録されないのはなぜですか?

<servlet> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <servlet-class> 
    org.glassfish.jersey.servlet.ServletContainer 
    </servlet-class> 
    <init-param> 
    <param-name>jersey.config.server.provider.packages</param-name> 
    <param-value>rest</param-value> 
    </init-param> 
    <init-param> 
    <param-name>jersey.config.server.provider.classnames</param-name> 
    <param-value>org.glassfish.jersey.filter.LoggingFilter</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

そして、これは私のリソースクラスである:

@Path("/main") 
public class MainResource { 

    @XmlRootElement 
    public class Planet { 
     public int id; 
     public String name; 
     public double radius; 
    } 

    @GET 
    @Produces(MediaType.APPLICATION_XML) 
    public Planet getPlanet() { 
     final Planet planet = new Planet(); 

     planet.id = 1; 
     planet.name = "Earth"; 
     planet.radius = 1.0; 

     return planet; 
    } 
} 

そして、私はTomcatサーバーを実行すると、ログはこのようなものです:

09-Jan-2015 13:19:10.501 INFO [http-apr-8080-exec-8] org.glassfish.jersey.filter.LoggingFilter.log 1 * Server has received a request on thread http-apr-8080-exec-8 
1 > GET http://localhost:8080/rest/main 
1 > accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
1 > accept-encoding: gzip, deflate, sdch 
1 > accept-language: en,zh-CN;q=0.8,zh;q=0.6 
1 > connection: keep-alive 
1 > cookie: JSESSIONID=69F79D567E7ECA27A129C477B91C7758 
1 > host: localhost:8080 
1 > user-agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 

09-Jan-2015 13:19:10.597 INFO [http-apr-8080-exec-8] org.glassfish.jersey.filter.LoggingFilter.log 1 * Server responded with a response on thread http-apr-8080-exec-8 
1 < 200 
1 < Content-Type: application/xml 

09-Jan-2015 13:19:10.794 INFO [http-apr-8080-exec-8] org.glassfish.jersey.filter.LoggingFilter.log 2 * Server responded with a response on thread http-apr-8080-exec-8 
2 < 500 

なぜ私は500エラーを表示するのだろうかと思いますが、例外スタックに関するエラーログは見つかりません。

私を助けてください。

答えて

19

私の問題は修正されました。私は今自分の質問に答えています。

最初に、例外トレースログを有効にするにはどうすればよいですか?

@Provider 
public class ExceptionMapper implements javax.ws.rs.ext.ExceptionMapper<Exception> { 
    @Override 
    public Response toResponse(Exception exception) { 
     exception.printStackTrace(); 
     return Response.status(500).build(); 
    } 
} 

はい、私自身でExceptionMapperを実装する必要があります。

第2に、私のコードのエラーは何ですか?

クラスプラネットは静的である必要があります。

関連する問題