我在同一位置安装了带有 CATALINA_HOME
和 CATALINA_BASE
的 tomcat。这个 tomcat 只托管一个 solr 实例。
我想做的第一件事是为 solr 生成 log4j 日志记录到一个单独的文件,比方说在 ${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 配置?
最佳答案
我已经设法解决了我自己的问题,如果有人需要的话,这里是答案。
要为 solr 启用 log4j,您需要下载并复制到 webapps/solr/WEB-INF/lib
下以下 jar slf4j-log4j12-1.7.6.jar
, slf4j-api-1.7.6.jar
和 log4j-1.2.17.jar
并删除任何slf4j-jdk
jar (如果存在)。然后添加您的 log4j.properties
webapps/solr/WEB-INF/classes
下的文件并创建目录 classes
如果它不存在。
就我而言,我错过了 slf4j
jar ,它正在从 tomcat 容器加载 jar ,这反过来又没有解决 classes/log4j.properties
.一旦将它们添加到 solr 中,正确的 log4j.properties
得到解决。
对于 tomcat log4j 配置,我遵循了 log4j 部分 here
如果你想从solr写入catalina.out
和一个单独的文件同时只需在 classes/log4j.properties
中添加两个 appender .
我没有设法配置 log4j appender 来控制来自 tomcats 的特定 webapp(在我的例子中是 solr)的 log4j 输出 log4j.properties
使用 log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/solr] =INFO, SOLR
.因此,如果有人对此配置有经验,那么很高兴知道如何操作。
关于Tomcat7、Log4j Container和WebApp级别的配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35850348/