Solr:如何关闭日志记录

26

好的,我对Solr非常满意,但是我似乎无法弄清楚如何降低日志记录级别,以便在进行大量导入运行时可以实际快速运行。

我甚至不确定它使用了哪个日志框架(因为你知道,java.util.logging、log4j和commons-logging还不够,我们需要将slf4j加入混合中!)好的抱歉,必须让这个小小的怒火发泄一下。:-)

所以我已经在src/main/resources/log4j.properties中进行了配置:

log4j.rootLogger=WARN, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%5p [%t] (%F:%L) - %m%n
org.apache.solr.core=WARN
org.apache.solr.update.processor=WARN

然后为了保险起见,我已经配置了src/main/resources/logging.properties

.level = WARNING

com.gwtstore.level=ALL
com.appgravity.level=ALL
org.apache.solr.core.level=WARNING
org.apache.solr.update.processor.level=WARNING

然而,我仍然看到很多以下内容:

INFO: {add=[-7757828706308755634]} 0 0
Feb 21, 2011 6:12:23 PM org.apache.solr.core.SolrCore execute
INFO: [] webapp=null path=/update params={} status=0 QTime=0 

这是我的类路径:

src/test/resources
src/test/java
src/main/resources
src/main/java
idea_rt.jar
junit-rt.jar
deploy.jar
dt.jar
javaws.jar
jce.jar
jconsole.jar
management-agent.jar
plugin.jar
sa-jdi.jar
alt-rt.jar
charsets.jar
classes.jar
jsse.jar
ui.jar
apple_provider.jar
dnsns.jar
localedata.jar
sunjce_provider.jar
sunpkcs11.jar
test-classes
classes
junit-4.8.2.jar
gwt-user-2.1.1.jar
gwt-servlet-2.1.1.jar
servlet-api-2.5.jar
weld-servlet-1.1.0.Final.jar
hibernate-core-3.6.0.Final.jar
antlr-2.7.6.jar
commons-collections-3.2.1.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-3.2.0.Final.jar
slf4j-api-1.6.0.jar
hibernate-jpa-2.0-api-1.0.0.Final.jar
jta-1.1.jar
hibernate-entitymanager-3.6.0.Final.jar
javassist-3.12.0.GA.jar
hibernate-c3p0-3.3.1.GA.jar
c3p0-0.9.1.jar
hibernate-validator-4.1.0.Final.jar
validation-api-1.0.0.GA.jar
cglib-nodep-2.2.jar
javax.inject-1.jar
cdi-api-1.0.jar
jboss-interceptor-api-1.1.jar
jsr250-api-1.0.jar
lucene-core-2.9.1.jar
lucene-snowball-2.9.1.jar
mongo-java-driver-2.4.jar
mysql-connector-java-5.1.6.jar
protobuf-java-2.2.0.jar
proxytoys-1.0.jar
quartz-1.8.4.jar
commons-lang-2.5.jar
commons-httpclient-3.1.jar
commons-logging-1.0.4.jar
commons-codec-1.2.jar
nekohtml-1.9.7.jar
xercesImpl-2.8.1.jar
xml-apis-1.3.03.jar
gwtquickstarter.jar
solr-solrj-1.4.1.jar
commons-io-1.4.jar
commons-fileupload-1.2.1.jar
wstx-asl-3.2.7.jar
stax-api-1.0.1.jar
geronimo-stax-api_1.0_spec-1.0.1.jar
solr-core-1.4.1.jar
lucene-analyzers-2.9.3.jar
lucene-highlighter-2.9.3.jar
lucene-memory-2.9.3.jar
lucene-queries-2.9.3.jar
lucene-misc-2.9.3.jar
lucene-spellchecker-2.9.3.jar
solr-commons-csv-1.4.1.jar
wstx-asl-3.2.7.jar
morphia-0.98s10.jar
androidmarketapi-0.5.jar
openid4java-0.9.5.jar

5
我喜欢你的短暴躁,我在网上读了几个小时后也有同样的感受,还有其他可能相关但实际上并不相关的API。 - Mark Bennett
2
关于你的抱怨:这真的是Sun公司的错,因为1)他们花费了太长时间来提出一个“标准”解决方案,2)生产出的“标准”解决方案在许多方面技术上不如现有的替代方案,3)放弃了这个问题。 - Stephen C
6个回答

10
  1. 你需要确保日志属性文件被部署到.../yourWebapp/WEB-INF/classes/log4j.properties

  2. 如果有一个.../yourWebapp/WEB-INF/classes/log4j.xml文件,它会覆盖属性文件。

  3. Log4j配置文件的位置也可以被系统属性覆盖。

了解更多有关Log4j如何获取其配置信息的信息,请查看Log4j介绍的此部分


1
这是关于编程的内容,翻译成中文如下:只需在我的logging.properties末尾添加“.level = WARNING”,然后重新启动即可关闭INFO日志记录。 - user3480763

4
如果您只想完全关闭Solr服务器的日志记录,请访问http://(YOUR-IP):8080/solr/admin,并导航到顶部列表中看到的日志选项。
在该页面上,您可以找到为Solr安装定义的各种日志级别的详细表格。要么将它们的父记录器更改为在应用程序中使用的记录器,要么完全关闭它们。
希望这是您正在寻找的内容。 谢谢

6
没问题,只有一个小细节需要说明:“……这是一种短暂的设置,适用于进行诊断工作,但在重新启动后不会保留……”摘自http://wiki.apache.org/solr/SolrLogging#line-36 - Halil Özgür

4
以下链接讨论了如何正确配置Solr日志记录。 http://lucidworks.lucidimagination.com/display/solr/Configuring+Logging 如果您想暂时更改日志记录,则可以从Solr管理页面进行更改。 要永久更改,您需要向Solr Web应用程序添加JDK日志记录属性文件。
对于Tomcat,以下是步骤:
1. 为solr Web应用程序在WB_INF文件夹中创建classes目录,即_TOMCAT_INSTALL_DIR%/webapps/solr/WEB-INF/classes/logging.properties_
2. 创建logging.properties文件
3. 添加以下条目以设置日志级别(可以为类或整个包设置日志级别,从FINEST到SEVERE):
org.apache.commons.digester.Digester.level = FINEST org.apache.solr.level = WARNING

1

我曾经为 SOLR 的 log4j 做过这件事,我可以告诉你这是很痛苦的。Log4j 在 SOLR 上不太好用。无论如何,以下是我让 SOLR 与 slf4j 和 log4j 协同工作的方法。如果有更简单的方法 - 太棒了 - 那就用它吧。

在 solr/lib 中

  • 添加 slf4j-log4j12-1.5.11.jar(确保版本与 slf4j-api-??? 匹配)
  • 删除 slf4j-jdk14-1.5.5.jar(重要 - 否则 log4j 将不会被使用)

在您的 Web 应用程序资源中添加您的 log4j.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "/WEB-INF/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" >
  <appender class="org.apache.log4j.DailyRollingFileAppender" name="FILE" >
    <param name="file" value="logs/jetty.log" />
    <param name="datePattern" value="'.'yyyy-MM" />
    <param name="append" value="true" />
    <layout class="org.apache.log4j.PatternLayout" >
      <param name="ConversionPattern" value="%d [%t] %-5p %C{6} (%F:%L) - %m%n" />
    </layout>
  </appender>
  <root>
    <priority value="error"></priority>
    <appender-ref ref="FILE" />
  </root>
</log4j:configuration>

感谢您发布答案,它似乎证实了我从其他阅读中猜测的内容。因此,SLF4J只是一个接口,因此您无法直接使用开关控制其输出。相反,您需要配置底层记录器,但您需要找出哪个记录器。对于Solr(和可能是Jetty),它看起来是Java内置的JUL,因此默认情况下应该配置它,或者像您所做的那样将其替换为Log4j。我还认为有时会使用JULI / Tomcat,尽管我不清楚在默认Jetty下运行时是否是这种情况,或者只有在切换到Tomcat时才是这种情况。 - Mark Bennett

1

在无数个文件中放置单词WARNING进行长时间的试验后,看起来我终于成功地减缓了Tomcat Solr日志记录。这对您的情况/环境有什么用处完全超出了我的理解范围,因为现在我的大脑充满了JAVA配置。无论如何,我还是写下来了,希望能够预防未来某些人的痛苦。

在此过程中,我可能已经完全禁用了一些日志记录,因此在调试(或例如在开发服务器上)时,您可能需要撤消我将在此描述的内容。

  1. 在您的配置文件夹中创建一个名为logging.properties的文件,例如在/etc/tomcat...中,如果该文件不存在。

  2. 如果logging.properties已经存在,请将其注释掉。但是,您可以选择不注释掉其他行,以防您需要一些日志记录。

  3. 将以下内容附加/插入到logging.properties中:

    .level = WARNING
    
  4. 如果$CATALINA_HOME不存在,请在$CATALINA_HOME/bin文件夹中创建一个名为setenv.sh的文件。($CATALINA_HOME在哪里?通常在/usr/share/tomcat...中,但是输入
    ps -ef | grep tomcat
    并在输出中查找字符串catalina.home或类似的内容,以确保。)

  5. 将以下内容附加/插入到setenv.sh中:

    export JAVA_OPTS="${JAVA_OPTS} -Djava.util.logging.config.file=/etc/tomcat.../logging.properties"
    
  6. 重新启动Tomcat(例如,/etc/init.d/tomcat... restart,具体取决于您的操作系统)

(将tomcat...替换为您实际使用的Tomcat版本)


0

除了Solr的最近版本中所写的内容外,您还可以选择配置慢查询日志记录。您可以设置阈值,超过该阈值的查询将被视为长时间运行的查询,并将这些查询写入单独的日志文件。

要实现此功能,请在solrconfig.xml文件中添加slowQueryThresholdMillis。例如,如果要将每个运行时间超过2秒的查询视为慢查询,则应将以下内容添加到solrconfig.xml文件中:

<slowQueryThresholdMillis>1000</slowQueryThresholdMillis>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接