Solr 使用 Log4j

2019-03-27 01:01|来源: 网路

原文出处:http://blog.chenlb.com/2010/08/solr-with-log4j.html

Solr 默认是用 Jdk 的日志输出。还好 Solr 是使用 slf4j 日志库,可以方便换用其它日志输出。solr 使用 log4j 也不难。重新生成 solr.war

把 solr.war 解压,然后把 log4j.properties 放到 WEB-INF/classes 中。没有 classes 创建一个。log4j.properties 如:

  1. log4j.addivity.org.apache=true  
  2. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender  
  3. log4j.appender.CONSOLE.Target=System.out  
  4. log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout  
  5. log4j.appender.CONSOLE.layout.ConversionPattern=%d %-5p %c{2} - %m%n  
  6. log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender  
  7. log4j.appender.ROLLING_FILE.Append=false  
  8. log4j.appender.ROLLING_FILE.File=./logs/rolling.log  
  9. log4j.appender.ROLLING_FILE.MaxBackupIndex=2  
  10. log4j.appender.ROLLING_FILE.MaxFileSize=10MB  
  11. log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout  
  12. log4j.appender.ROLLING_FILE.layout.ConversionPattern=%d %-5p %c{2} - %m%n  
  13. log4j.logger.org.apache.solr=INFO,ROLLING_FILE  
  14. log4j.rootLogger=INFO,CONSOLE  
log4j.addivity.org.apache=true log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Target=System.out log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d %-5p %c{2} - %m%n log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender log4j.appender.ROLLING_FILE.Append=false log4j.appender.ROLLING_FILE.File=./logs/rolling.log log4j.appender.ROLLING_FILE.MaxBackupIndex=2 log4j.appender.ROLLING_FILE.MaxFileSize=10MB log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout log4j.appender.ROLLING_FILE.layout.ConversionPattern=%d %-5p %c{2} - %m%n log4j.logger.org.apache.solr=INFO,ROLLING_FILE log4j.rootLogger=INFO,CONSOLE 

把 下载的slf4j-log4j12-1.5.5.jar 和 log4j-1.2.16.jar 放到 WEB-INF/lib 里,把 slf4j-jdk14-1.5.5.jar 删除。

重新用 zip 方式压缩成 solr.war 就行了,其实也可以不用 solr.war,直接目录就行。我在 jetty 中测试过。

延伸:把 jetty 的确输出到文件中。

jetty.home/etc/jetty.xml 中加:

  1. <New id="ServerLog" class="java.io.PrintStream">  
  2.   <Arg>  
  3.     <New class="org.mortbay.util.RolloverFileOutputStream">  
  4.       <Arg><SystemProperty name="jetty.home" default="."/>/logs/stderrout-yyyy_mm_dd.log</Arg>  
  5.       <Arg type="boolean">false</Arg>  
  6.       <Arg type="int">90</Arg>  
  7.       <Arg><Call class="java.util.TimeZone" name="getTimeZone"><Arg>GMT+8</Arg></Call></Arg>  
  8.       <Get id="ServerLogName" name="datedFilename"/>  
  9.     </New>  
  10.   </Arg>  
  11. </New>  
  12.   
  13. <Call class="org.mortbay.log.Log" name="info"><Arg>Redirecting stderr/stdout to <Ref id="ServerLogName"/></Arg></Call>  
  14. <Call class="java.lang.System" name="setErr"><Arg><Ref id="ServerLog"/></Arg></Call>  
  15. <Call class="java.lang.System" name="setOut"><Arg><Ref id="ServerLog"/></Arg></Call>  
    <New id="ServerLog" class="java.io.PrintStream">       <Arg>         <New class="org.mortbay.util.RolloverFileOutputStream">           <Arg><SystemProperty name="jetty.home" default="."/>/logs/stderrout-yyyy_mm_dd.log</Arg>           <Arg type="boolean">false</Arg>           <Arg type="int">90</Arg>           <Arg><Call class="java.util.TimeZone" name="getTimeZone"><Arg>GMT+8</Arg></Call></Arg>           <Get id="ServerLogName" name="datedFilename"/>         </New>       </Arg>     </New>      <Call class="org.mortbay.log.Log" name="info"><Arg>Redirecting stderr/stdout to <Ref id="ServerLogName"/></Arg></Call>     <Call class="java.lang.System" name="setErr"><Arg><Ref id="ServerLog"/></Arg></Call>     <Call class="java.lang.System" name="setOut"><Arg><Ref id="ServerLog"/></Arg></Call> 

就可以把控制台的输出到文件。


转自:http://www.cnblogs.com/wycg1984/archive/2010/08/30/1812382

相关问答

更多
  • log4j的使用步骤[2022-10-29]

    一、使用步骤:   第一步   加入log4j-1.2.8.jar(可以选择log4j的更高版本)到lib下。   第二步   在CLASSPATH下建立log4j.properties。内容如下(数字为行号):   1 log4j.rootCategory=INFO, stdout , R   2   3 log4j.appender.stdout=org.apache.log4j.ConsoleAppender   4 log4j.appender.stdout.layout=org.apache.lo ...
  • 所以过了一段时间,我想出了如何解决这个问题。 回顾一下,Solr在启动时不断创建一大堆solr_log *和gc_log *模式的文件,并定期在一天中进行创建。 最终,由于Solr喜欢创建无数的日志,我有一些非常严重的空间问题。 导航到/path/to/solr/bin并找到solr脚本,该脚本在启动时运行。 打开文件,查找以下内容,并注释mv "$SOLR_LOGS_DIR/solr.log" "$SOLR_LOGS_DIR/solr_log_$(date +"%Y%m%d_%H%M")" : # bac ...
  • 解决了JDBC appender,我使用了命令: log4j.appender.JDBC.sql = INSERT INTO .... 我只是将请求的参数传递给插入查询,但是我已经配置了持久性。 感谢log4j.MDC MDC教程 Solved with JDBC appender , i used the command : log4j.appender.JDBC.sql=INSERT INTO .... I just pass the requested parameters to the insert ...
  • Solr从版本1.4开始使用JDK日志记录 。 也许这个教程将帮助你弄清楚如何配置你的Tomcat。 或者将Solr.war文件中的slfj api替换为Solr文档中提到的log4j。 如果你想在客户端看到更多的信息,请看SolrQuery javadoc。 希望这可以帮助你向前迈进一步。 Solr makes use of the JDK Logging since Version 1.4. Maybe this tutorial will help you figure out how to conf ...
  • 我想你可以在服务器/ [jboss-configuration] / lib中部署Solr库(在JBoss 4中,在新版本中可能是相同的),然后它们在启动时可用。 或者不要使用JBoss log4j配置并在WAR中定义自己的log4j.xml(在lib或类中的JAR中)。 它在部署时将由应用程序类加载器加载。 I think you could either deploy the Solr libs in server/[jboss-configuration]/lib (in JBoss 4 that i ...
  • 你检查过任何SLF4J输出了吗? 如果存在SLF4J的多个绑定,SLF4J会抱怨它。 另一个问题是; 您已将记录器类别es.jumtech.workcontrol设置为level ALL ,这会导致isDebugEnabled()返回true。 你应该至少看到一些东西(如果你记录的超过8k,这是默认的缓冲区大小)。 我提出三件事: 将根记录器临时设置为ALL或DEBUG 使用-Dlog4j.debug = true启动应用程序。 您应该看到bootstrapping log4j的一些细节。 确保,logge ...
  • 确保根记录器不会记录到自身。 #bad log4j.rootLogger=INFO, file, KAFKA #good log4j.rootLogger=INFO, file 我的完整配置 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4 ...
  • 您在每个查询中都给出了参数rows=2147483647 。 该参数的含义是(取自参考文献) 您可以使用rows参数对查询中的结果进行分页。 该参数指定Solr应一次返回客户端的完整结果集中的最大文档数。 默认值为10.也就是说,默认情况下,Solr一次返回10个文档以响应查询。 因此,您告诉Solr生效,在单个响应中发送查询的所有匹配。 这是你糟糕表现的原因。 当查询“java”时 ,谷歌是否会向您发送所有500.000.000次匹配,不会。 为什么不,性能。 我知道的每一个IR应用程序都会为您提供一个带 ...
  • slf4j是一个日志记录外观,这意味着它实际上不会写任何日志。 它可以配置为使用log4j进行日志记录,方法是添加slf4j-log4j jar (假设您正在使用log4j 1.2.xx)并从WEB-INF/lib文件夹中删除slf4j-jdk14 jar。 我假设您的应用程序服务器将log4j类暴露给solr webapp - 如果不是这样,那么您还需要将log4j jar添加到solr WEB-INF/lib目录中。 slf4j is a logging facade, meaning that it ...
  • 您可以结合使用logstash (用于发送和过滤日志)+ elasticsearch (用于索引和存储)+ kibana (用于漂亮的GUI)。 You can use a combination of logstash (for shipping and filtering logs) + elasticsearch (for indexing and storage) + kibana (for a pretty GUI).