2010-08-23 5 views
4

저는 Java 세계에 처음 접했고 Javax Web Service 응용 프로그램을 디버깅해야합니다.Tomcat의 Catalina 오류 로그에 URL 표시

일부 페이지는 예외를 발생시키고 올바르게 기록되지만 코드를 호출 한 페이지의 URL, 로그 내 및 스택 추적을 갖고 싶습니다.

GET 및 POST 정보 역시 중요합니다.

가능합니까?

답변

7

스택 추적과 함께 오류 로그에 표시하려면 Filter이 필요합니다.

doFilter() 메서드를 구현하여 각 요청의 호출 URL을 확인하고 기록하십시오. 아래에 몇 가지 샘플 코드를 제공했습니다.

HttpServletRequest 개체에 액세스하면 해당 메서드 중 하나를 호출 할 수 있습니다. 필요한 항목은 getRequestURI()getMethod()입니다.

로거가있는 것으로 가정하고 출력을 원하는 로그 파일로 보낼 수 있습니다.

Filterweb.xml에있는 /mywebservice과 같은 URL 패턴으로 매핑하면 다른 요청에서는 호출되지 않고 웹 서비스에서만 호출됩니다.

<filter> 
     <filter-name>Logging_URL_Filter</filter-name> 
     <filter-class>com.mysite.URLFilter</filter-class> 
    </filter> 
<filter-mapping> 
      <filter-name>Logging_URL_Filter</filter-name> 
      <url-pattern>/mywebservice</url-pattern> 
    </filter-mapping> 
+0

감사합니다, 작동하지만 모든 페이지 액세스가 필요합니다. 오류 발생시에만 트리거하는 방법이 있습니까? –

+0

요청 본문 (POST 요청의 데이터)을 가져 오려면'hsr.getReader()'(http://download.oracle.com/docs/cd/E17802_01/products/products/servlet/2.5)를 사용하십시오. /docs/servlet-2_5-mr2/index.html) 문자 데이터 인 경우. – LarsH

+1

@Mahoua : 불행하게도이 경우 필터는 요청이 실행되기 전에 항상 트리거되므로 성공 또는 오류가 발생하는지 알 수 없습니다. – JoseK

1

예 ... 사용 AccessLogValve.

<Valve className="org.apache.catalina.valves.AccessLogValve" 
     directory="logs/access-logs/" prefix="localhost_access_log." 
     suffix=".log" 
     pattern="%h %l %t &quot;%r&quot; %s %b &quot;%{Referer}i&quot; &quot;%{User-Agent}i&quot; %T" 
     resolveHosts="false"/> 

이 %의 필드에 대한 정보를 the docs를 참조하십시오 : 예를 들어

c:\Program Files\Apache Software Foundation\Tomcat 6.0\conf\server.xml에, 당신의 <Host> 요소에 다음과 같은 것을 넣어. 예. GET 및 POST 정보를 요청했습니다. 이 방법은 % r (또는 % m) 필드로 표시됩니다. 쿼리 매개 변수를 원하면 GET의 쿼리 문자열 (% q)에 포함됩니다.

위의 정보는 지정한 액세스 로그로 이동합니다. 오류가 발생할 때마다 (그리고 오류가있는 경우에만) 오류 로그에이 정보를 요청하는 경우 : 일부 구성 요소는 이미이를 수행하지만 그렇지 않은 경우이를 수행하는 방법을 알지 못합니다. 오류가 발생하고 URL이 제공되지 않으면 오류 로그의 로그를 액세스하고 로그를 액세스하여 로그를 연관시킵니다.

다양한 기능에 대한 로깅의 세분성을 설정할 수 있습니다 (Logging in Tomcat 참조). 발생하는 오류와 관련이있을 수도 있고 그렇지 않을 수도있는 더 많은 정보를 얻을 수 있습니다.

+0

이 데이터는 액세스 로그에 저장됩니다. OP는 stacktrace와 함께 오류 로그에 로그인하려고합니다. 그래서 그는 발신자와의 오류를 추적 할 수 있습니다. – JoseK

+0

@JoseK 의견에 감사드립니다. 내가 할 수있는 정도까지 반영하도록 내 게시물을 업데이트했습니다. 당신의 답을 통해 기꺼이 배울 수 있습니다. – LarsH

+0

@LarsH - 오신 것을 환영합니다 :) – JoseK