2011-09-07 7 views
1

Solr이 모든 나쁜 결과를 기록하는 방법을 알아낼 수없는 것 같습니다. 기본적으로 잘못된 URL이 들어 오면 (예 : qt=unknownhandler과 같은 요청 처리기의 요청) 로그 할 필요가 있습니다. .SOLR : 로깅 요청이 잘못됨

내 로그 파일에 Solr 시작 로그와 예외 로그를 ​​볼 수 있지만 잘못된 요청은 볼 수 없습니다.

5SOLR.org.apache.juli.FileHandler.level = ALL 
5SOLR.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 
5SOLR.org.apache.juli.FileHandler.prefix = SOLR. 


org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/solr].level = ALL 
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/solr].handlers = 5SOLR.org.apache.juli.FileHandler 

을 나는 5SOLR.org를 추가했습니다 : JDK4 java.util.logging의 및 SOLR를 사용하여

임 로깅이 내부적으로 SLF4J 및 SLF4J-JDK를 사용, 내 TOMCAT_DIR/conf의/logging.properties은 다음과 같습니다. apache.juli.FileHandler를 핸들러 세트에 추가하십시오.

Sep 7, 2011 12:49:04 PM org.apache.catalina.core.StandardContext listenerStart 
FINE: Sending application start events 
Sep 7, 2011 12:49:04 PM org.apache.catalina.session.StandardSession readObject 
FINE: readObject() loading session C8A52B935A03A78BEC4A799119A79B49 
Sep 7, 2011 12:49:04 PM org.apache.catalina.core.StandardContext filterStart 
FINE: Starting filters 
Sep 7, 2011 12:49:04 PM org.apache.catalina.core.StandardContext filterStart 
FINE: Starting filter 'SolrRequestFilter' 
+0

Solrconfig.xml에는 HTTP STATUS CODE : 400 (잘못된 요청) 이벤트 기록 관련 요소가 없습니다.모든 "응답자"에게 미리 감사드립니다. – Zasz

답변

2

모든 요청을 접근 로그에 서버에 보내 볼 수 있습니다 : 왜 로그의이 종류를 볼 수 있지만 내가이, 나쁜 요청을 을 볼 수 없습니다 그 것이다. 은 $ TOMCAT_HOME/conf/server.xml의 AccessLogValve를 주석 처리합니다.

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
      prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/> 

4xx 요청을 로깅 할 방법은 없지만 다음과 같이 해킹 소스 코드를 작성하십시오.

제거 테스트 코드 조건 org.apache.solr.servlet.SolrDispatchFilter.java * 에 대해 sendError * 방법. WEB-INF가/lib 디렉토리에 * 항아리와 웹 컨테이너를 다시 시작합니다 -.

protected void sendError(HttpServletResponse res, Throwable ex) throws IOException { 
    int code=500; 
    String trace = ""; 
    if(ex instanceof SolrException) { 
    code = ((SolrException)ex).code(); 
    } 

    // For any regular code, don't include the stack trace 
    if(code == 500 || code < 100) { 
    StringWriter sw = new StringWriter(); 
    ex.printStackTrace(new PrintWriter(sw)); 
    trace = "\n\n"+sw.toString(); 

    SolrException.logOnce(log,null,ex); 

    // non standard codes have undefined results with various servers 
    if(code < 100) { 
     log.warn("invalid return code: "+code); 
     code = 500; 
    } 
    } 
    res.sendError(code, ex.getMessage() + trace); 
} 

컴파일 후, 당신은 당신의 새로운 아파치를-SOLR 코어 넣을 필요가있다. 당신은 아래의 모든 오류를 볼 수 있습니다. org.apache.solr.common.SolrException :

2011년 9월 22일 오후 5시 29분 18초는 심각한 로그 org.apache.solr.common.SolrException 알 수없는 핸들러를 : notexist org.apache.solr에서 org.apache.catalina.core.ApplicationFilterChain.doFilter에서 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:235) 에서 .servlet.SolrDispatchFilter.doFilter (SolrDispatchFilter.java:227) (ApplicationFilterChain.java : 206) at org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:191) 에서 org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:102) at org.apache.catalina.valves. AccessLogValve.invoke (AccessLogValve.java:555) at org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process (Http11Processor.java:857) at org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process (Http11Protocol.java:588) at org.apache.tomcat. util.net.JIoEndpoint $ Worker.run (JIoEndpoint.java:489) at java.lang.Thread.run (Thread.java:662)

+0

이것은 모든 요청을 기록 할 것이고 아무 것도 구성 할 필요가 없었습니다.이 구성은 이미 선반 위에있었습니다. SOLR 로그에 잘못된 요청을 작성해야합니다. (임시 해결책으로 나는 응용 프로그램 로그를 solr 나쁜 요청으로 만들었습니다.) – Zasz

+0

이것은 좋은 일이고 저에게 좋습니다! 나는 해킹을 유지하고 소스 코드를 마지막 옵션으로 재 컴파일했다 (나중에 solr을 부드럽게 업데이트하기 위해). 그러나 이것은 내가 여기서 한 말보다 조금 더 바꿔야한다고해도 저를 도와주었습니다. – Zasz