2017-11-02 18 views
0

Grizzly 서버에서 액세스 로그를 작성할 수 없습니다. 다음과 같이Grizzly 서버와 저지에서 액세스 로그가 비어 있습니다.

간단한 설정은 다음과 같습니다 자원의

import org.glassfish.grizzly.http.server.HttpServer; 
import org.glassfish.grizzly.http.server.accesslog.AccessLogBuilder; 
import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory; 
import org.glassfish.jersey.server.ResourceConfig; 
import org.glassfish.jersey.server.ServerProperties; 

import java.net.URI; 
import java.util.HashMap; 

public class App { 
    public static void main(String[] args) throws Exception { 
     URI uri = new URI("http://localhost:12987/"); 
     ResourceConfig rc = new ResourceConfig().registerClasses(Greeter.class); 
     HttpServer server = GrizzlyHttpServerFactory.createHttpServer(uri, rc); 
     new AccessLogBuilder("hi.access.log").instrument(server.getServerConfiguration()); 
     server.start(); 
    } 
} 

코드 :

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 

@Path("/") 
public class Greeter { 
    @GET 
    @Path("hi") 
    public String hi() { return "hi!"; } 
} 
종속 대한 설명과 버전이 포함

Gradle을 스크립트 :

buildscript { 
    ext.java_version = '1.8' 
    ext.jersey_version = '2.25.1' 

    repositories { 
     mavenCentral() 
    } 
} 

apply plugin: 'java' 
sourceCompatibility = 1.8 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile "javax.servlet:servlet-api:2.5" 
    compile "org.glassfish.jersey.core:jersey-server:$jersey_version" 
    compile "org.glassfish.jersey.containers:jersey-container-servlet-core:$jersey_version" 
    compile "org.glassfish.jersey.containers:jersey-container-grizzly2-http:$jersey_version" 
} 

내가 예상치 못한 행동 곳을 관찰을 액세스 로그 파일은 서버의 시작 부분과 함께 작성되지만 아무것도 기록되지 않습니다. 요청이있을 때. 서버는 응답을 보내고 다른 모든면에서 정상적으로 작동합니다.

저지를 디버깅하려고했지만 Jersey가 수 많은 반영 및 동적로드에 의존하기 때문에 도움이되지 않았습니다. 또한 모니터링을위한 속성을 추가하려고 시도했습니다. 특히 ServerProperties.MONITORING_ENABLED이지만 다시는 아무 것도 변경하지 않았습니다.

액세스 로그 기능을 추가 또는 구성하려면 어떻게해야합니까?

답변

0

이 유일한 필요한 변화가

HttpServer server = GrizzlyHttpServerFactory.createHttpServer(uri, rc, false); 

참고 즉시 서버를 시작하지 않도록 공장을 알려주는 세 번째 인수를 false 것으로 밝혀졌습니다. 그렇지 않으면 (시작된 후에) 서버의 구성이 작동에 영향을주지 않습니다.