Lucene SOLR:记录错误请求

Lucene SOLR:记录错误请求,lucene,solr,slf4j,java.util.logging,Lucene,Solr,Slf4j,Java.util.logging,我似乎不知道如何让Solr记录所有错误的Resests——基本上,每当出现错误的URL时,比如说,requesthandler上不存在的请求(如qt=unknownhandler),我都需要记录它 我可以在日志文件中看到Solr启动日志和异常日志,但不能看到坏请求 Im日志记录使用JDK4 java.util.logging,solr在内部使用slf4j和slf4j jdk,我的tomcat_dir/conf/logging.properties如下所示: 5SOLR.org.apache.ju

我似乎不知道如何让Solr记录所有错误的Resests——基本上,每当出现错误的URL时,比如说,requesthandler上不存在的请求(如
qt=unknownhandler
),我都需要记录它

我可以在日志文件中看到Solr启动日志和异常日志,但不能看到坏请求

Im日志记录使用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添加到处理程序集中。为什么我看不到坏请求,而我可以看到这些日志:

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'

您可以在访问日志中看到发送到服务器的所有请求。 只需在$TOMCAT_HOME/conf/server.xml中注释掉AccessLogValve


并没有办法记录4xx请求,但按照下面的描述破解源代码

删除org.apache.solr.servlet.SolrDispatchFilter.java中的测试代码条件

受保护的void senderor(HttpServletResponse res,Throwable ex)引发IOException{
int代码=500;
字符串trace=“”;
if(例如SolrException实例){
code=((SolrException)ex).code();
}
//对于任何常规代码,不要包含堆栈跟踪
如果(代码==500 | |代码<100){
StringWriter sw=新的StringWriter();
例如printStackTrace(新的PrintWriter(sw));
trace=“\n\n”+sw.toString();
logOnce(log,null,ex);
//非标准代码在各种服务器上具有未定义的结果
如果(代码<100){
log.warn(“无效返回代码:+代码”);
代码=500;
}
}
res.sendError(代码,例如getMessage()+跟踪);
}
编译之后,您需要将新的ApacheSolrCore-*.jar放入WEB-INF/lib,并重新启动WEB容器。您将看到以下所有错误

2011年9月22日下午5:29:18 org.apache.solr.common.SolrException日志 严重:org.apache.solr.common.SolrException:未知处理程序:notexist 位于org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:227) 位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 位于org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 位于org.apache.catalina.valves.AccessLogValve.invoke(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.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 位于org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 运行(Thread.java:662)


Solrconfig.xml没有关于记录HTTP状态代码400(错误请求)事件的元素。提前感谢所有的“应答器”,这将记录所有的请求,我不需要配置任何东西,这一配置已经是现成的了。我需要让SOLR记录对它的错误请求。(作为一个临时解决方案,我让应用程序记录solr的错误请求。)这很好,对我来说很有用!我把hack&重新编译源代码作为最后一个选项(为了以后顺利更新solr)。但是这帮助我做到了这一点,尽管我必须比你在这里提到的做更多的改变。