我在同一位置安装了CATALINA_HOME
和CATALINA_BASE
的tomcat。这个tomcat只承载一个solr实例。
我想要做的第一件事就是生成log4j日志记录到solr的单独文件,让我们说${catalina.base}/logs/solr.log
,我设法通过在${CATALINA_HOME}/webapps/solr/WEB-INF/classes/
中添加log4j.properties来实现。
然后我想配置tomcat本身来生成log4j输出,并遵循apache guide来获取log4j。这适用于catalina,但似乎覆盖了我以前的solr配置和它正在记录的单独文件,不再记录。
我尝试删除WEB-INF/classes
目录并将appender复制到tomcat log4j文件中,并在最后添加了此log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/solr] =INFO, SOLR
但仍无法获取solr本身的单独文件记录。
这是否因为类加载层次结构的顺序而发生?如果是的话为什么?通常应该可以在较低级别覆盖配置。
是否有其他可能的方法为webapp配置单独的log4j?
答案 0 :(得分:0)
我设法解决了我自己的问题,所以如果有人需要它,这就是答案。
要为solr启用log4j,您需要在webapps/solr/WEB-INF/lib
以下的slf4j-log4j12-1.7.6.jar
,slf4j-api-1.7.6.jar
和log4j-1.2.17.jar
以及删除任意下载并复制如果存在slf4j-jdk
罐子。然后在log4j.properties
下添加webapps/solr/WEB-INF/classes
文件,如果不存在则创建目录classes
。
在我的情况下,我错过了slf4j
罐子,它正在从tomcat容器加载jar,而容器又没有解析classes/log4j.properties
。将它们添加到solr后,正确的log4j.properties
已解决。
对于tomcat log4j配置,我遵循log4j部分here
如果你想同时从solr写到catalina.out
和一个单独的文件,只需在classes/log4j.properties
中添加两个appender。
我没有设法使用log4j.properties
从tomcats log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/solr] =INFO, SOLR
配置log4j appender来控制特定webapp(在我的案例中为solr)的log4j输出。因此,如果有人有这种配置的经验,那么很高兴知道如何使用。