1

Solrにすべての不正な結果をログに記録させる方法がわからないようです-基本的に、たとえば、のように存在しないrequesthandlerでのリクエストなど、不正なURLが着信するたびに、qt=unknownhandlerログに記録する必要があります。

Solrの起動ログと例外ログをログファイルに表示できますが、悪い要求は表示されません。

JDK4を使用したImロギング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を追加しました。この種のログを確認できるのに、不正なリクエストを確認できないのはなぜですか。

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'
4

1 に答える 1

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 *メソッドのテストコード条件を削除します。

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に配置し、Webコンテナーを再起動する必要があります。以下のようなエラーがすべて表示されます。

2011年9月22日17:29:18org.apache.solr.common.SolrExceptionログ重大:org.apache.solr.common.SolrException:不明なハンドラー:org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter .java:227)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)atorg.apache.catalina。 core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)でorg.apache.catalinaで。org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)のvalves.AccessLogValve.invoke(AccessLogValve.java:555)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 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)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)java.lang.Thread.run(Thread.java:662)で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)java.lang.Thread.run(Thread.java:662)で

于 2011-09-21T03:49:27.963 に答える