SOLR: регистрация плохих запросов - PullRequest
1 голос
/ 07 сентября 2011

Кажется, я не могу понять, как сделать так, чтобы Solr регистрировал все неудачные запросы. Обычно, когда приходит плохой URL, скажем, запрос на обработчик запросов, который не существует, например qt=unknownhandler, мне нужно его регистрировать.

Я вижу журналы запуска Solr и журналы исключений в моем файле журнала, но НЕ плохие запросы.

Я веду журнал, используя JDK4 java.util.Logging и solr внутренне используют slf4j и slf4j-jdk, Мой tomcat_dir / conf / logging.properties выглядит так:

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.apache.juli.FileHandler в набор обработчиков. Почему я не могу увидеть плохие запросы, а я CAN вижу такие журналы:

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'

1 Ответ

2 голосов
/ 21 сентября 2011

вы можете увидеть все запросы, отправленные на ваш сервер в журнале доступа.просто закомментируйте AccessLogValve в $ TOMCAT_HOME / conf / server.xml.

<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 * метод.

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 );
}

после компиляции, вам нужно поместить ваш новый apache-solr-core - *. jar в WEB-INF / lib и перезапустить ваш веб-контейнер.вы увидите все ошибки, как показано ниже.

22 сентября 2011 г., 17:29:18 org.apache.solr.common.SolrException log SEVERE: org.apache.solr.common.SolrException:неизвестный обработчик..ApplicationFilterChain.org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.AccessLogValve.java:555) в org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:109) в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:298) в org.apache.coyote.http11.Http11Processor.process (Http11Processor.java:857) в org.apache.coyote.http11.588) в org.apache.tomcat.util.net.JIoEndpoint $ Worker.run (JIoEndpoint.java:489) в java.lang.Thread.run (Thread.java:662)

...