2011-01-24 5 views
2

java.util.logging을 사용하여 Java 응용 프로그램에 로그인합니다. 또한 javax.xml.ws.Endpoint을 사용하여 SOAP 인터페이스를 게시합니다. 나는 모든이 같은 로그 항목과 함께 시작할 올려 더 많은 예외 추가 시간이 지남에 원치 않는 정보 필터링 - 로거의 메시지

:

Jan 24, 2011 12:29:27 PM com.sun.xml.internal.ws.model.RuntimeModeler getExceptionBeanClass 
INFO: Dynamically creating exception bean Class de.wi08e.myhome.frontend.jaxws.NotLoggedInBean 

내가 그들을 차단하는 필터를 다음 시도를,하지만 난 어떤 클래스 확실하지 않다 getLogger로 얻을 수 :

/* Filter ExceptionBeanClass logs */ 
Logger loggerInfo = Logger.getLogger("javax.xml.ws.Endpoint"); 
loggerInfo.setFilter(new Filter() { 

    @Override 
    public boolean isLoggable(LogRecord l) { 
     System.out.println(l.getMessage()); 
     if (l.getMessage().startsWith("Dynamically creating exception bean Class")) 
      return false; 
     return true; 
    } 

}); 

사람이 로그 항목을 작성하는 클래스 찾는 방법을 알고 있나요? 이 메시지를 걸러 낼 수있는 다른 방법이 있습니까?

편집 : 나는 또한 Logger.getLogger("com.sun.xml.internal.ws.model.RuntimeModeler")을 시도했지만 여전히

답변

4

다음 플래그를 사용하여 Java 프로그램을 실행할 수 있습니다. -Djava.util.logging.config.file=<mylogging.properties> 여기서 mylogging.properties는 코드에서 수행하는 대신 다음 내용이있는 파일입니다.

javax.enterprise.resource.webservices.jaxws.server.level = WARN 

http://www.docjar.com/html/api/com/sun/xml/internal/ws/model/RuntimeModeler.java.html

186  private static final Logger logger = 
    187   Logger.getLogger(
    188    com.sun.xml.internal.ws.util.Constants.LoggingDomain + ".server"); 

에서와 상수에서

public static final java.lang.String LoggingDomain = "javax.enterprise.resource.webservices.jaxws"; 
+0

작동하지 않습니다 .--("com.sun.xml.internal.ws.model.RuntimeModeler"는 필터링 방법이 호출되지 않기 때문에 잘못된 클래스 이름 인 것 같습니다. – marekventur

+0

정의한 필터링 방법을 호출하지 않습니다. ,이 특정 로거에 대한 최소 로그 수준을 WARN으로 올리면 INFO 메시지가 무시됩니다. "java -Djava.util.logging.config.file = "와 함께 프로그램을 실행하고 있습니까? "? –

+0

예, 확실합니다 ... – marekventur

0

로그 항목은이 로그를 생성하는 com.sun.xml.internal.ws.model.RuntimeModeler 클래스의 것을 나타내는 것 같다 ... 작동하지 않습니다 메시지. 이 로거의 레벨을 낮추어서 필터링 할 수 있어야합니다.

+0

여전히 작동하지 않습니다. Logger loggerInfo = Logger.getLogger ("com.sun.xml.internal.ws.model.RuntimeModeler"); loggerInfo.setLevel (Level.WARNING); loggerInfo.setFilter (...); – marekventur

1

편집 : 클레멘트 P가 내 앞에 바로 긴이 질문에 대답; 모든 엄지 손가락 업은 그에게 가야합니다!

약간 다른 방법을 사용하기 때문에 여기 내 대답을 계속합니다.


이제 직접 해결해 보았습니다. com.sun.xml.internal.ws.model.RuntimeModeler에서

방법 getExceptionBeanClass이 메시지에 대한 책임이있다 :

Logger.getLogger("javax.enterprise.resource.webservices.jaxws.server").setLevel(Level.WARNING); 

사람이 관심이 있다면, 이것은 내가 그것을 발견하는 방법이다 : 즉,이 솔루션입니다. 그것은 당신이 복사하여 과거 수 LoggingDomain 일정 기능

Logger.getLogger(com.sun.xml.ws.util.Constants.LoggingDomain + ".server"); 

구글 - 보내고 com.sun.xml.ws.util.Constants에 대한 것은 리드 here으로 통해 인스턴스 정적 Logger를 사용합니다.

그러나이 솔루션은 Sun의 '개인용'네임 스페이스 및 구현에 의존하기 때문에 모든 JRE에서 작동하지 않습니다.

0

또는 누락 된 클래스를 만들 수도 있습니다. 실제로 웹 서비스를 만들 때 따라야 할 표준 절차입니다.

이 클래스를 만들면 (즉, de.wi08e.myhome.frontend.jaxws.NotLoggedInBean), 그때 그것은 런타임에 그것을 만들려고하지 않고 기존 클래스를 사용합니다.

실제로 이러한 클래스를 직접 만들지 않아도됩니다. wsgen 도구를 사용하여 생성 할 수 있습니다. wsgen.exe은 java jdk의 일부입니다. 따라서 명령 줄에서이 명령을 실행할 수 있습니다.

wsgen.exe -verbose -keep -cp . de.wi08e.myhome.frontend.WebService -d source 

다음으로 생성 된 파일을 올바른 프로젝트 원본 폴더로 이동하십시오.

관련 문제