Tomcat7、Log4j Container和WebApp级别的配置

标签 tomcat solr log4j tomcat7

我在同一位置安装了带有 CATALINA_HOMECATALINA_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.jarlog4j-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/

相关文章:

solr - 使用身份验证在控制台中创建 Solr 核心

java - 测试时的 log4j 配置仅显示错误

java - 当我从 solr 查询时,发生了一个常见的异常,告诉我未定义的字段 userId

spring - 为什么我的 Spring Web 应用程序项目不能正确运行 Web 和 Thymeleaf 依赖项?

java - 解析日志文件,Apache Tomcat

tomcat - 使用 Orbeon CE 驱动日志文件分析 (Saxon)

Solr(5.3.1) 拼写检查与建议

java - 改造 - Log4j

java NoClassDefFoundError 与 Maven 依赖项 (log4j)

tomcat - 从命令行停止 web 应用程序 tomcat