tomcat - Tomcat 库和每个 Webapp 中的 log4j

标签 tomcat log4j jackrabbit

我使用 Apache Jackrabbit 作为部署到单个 tomcat 容器的几个 Web 应用程序的内容存储库。为了将 jackrabbit 作为 jndi 资源,我在 tomcat/lib 中添加了 jackrabbit jar 及其所有依赖项(包括 slf4j 和 log4j),以使其可用于我的所有 Web 应用程序。但是日志记录有问题...

在启动 log4j 时提示没有找到附加项:

log4j:WARN No appenders could be found for logger (org.apache.jackrabbit.core.config.ConfigurationErrorHandler).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

现在 jackrabbit 和我的网络应用程序都不会产生任何日志记录语句。

我尝试将 log4j.xml 配置添加到 lib 目录,但不行。还尝试将它直接添加到长耳兔 jar 中,但没有成功。

如何为 tomcat/lib 中的依赖项以及 tomcat 中的每个 Web 应用程序配置 log4j?

最佳答案

从 log4j 警告中可以清楚地看出,在您的应用程序中 log4j 未初始化,我之前不确定您在应用程序中的表现如何,但现在您可以试试这个。 我在我的应用程序中使用了相同的方法,其中所有日志记录 jar 都存在于服务器 lib 目录中。

  1. 将 log4j.properties 放在您的项目 WEB-INF 目录中,并要求您的 servlet 在应用程序启动期间对其进行初始化。您可以编写一个启动 servlet,并在 init 方法中将此属性文件作为参数传递给 init。

例如:在您的 web.xml 中是这样的。

    <servlet>
    <servlet-name>MyLog4JInitServlet</servlet-name>
    <servlet-class>test.MyLog4JInitServlet</servlet-class>
    <init-param>
        <param-name>log4j-properties-location</param-name>
        <param-value>WEB-INF/log4j.properties</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

并且您可以像这样在您的 servlet 中使用 init 方法来初始化 log4j。

public void init(ServletConfig config) throws ServletException {
    String log4jLocation = config.getInitParameter("log4j-properties-location");

    ServletContext sc = config.getServletContext();

    if (log4jLocation == null) {
        BasicConfigurator.configure();
    } else {
        String webAppPath = sc.getRealPath("/");
        String log4jProp = webAppPath + log4jLocation;
        File logFile= new File(log4jProp);
        if (logFile.exists()) {
            System.out.println("Initializing log4j with: " + log4jProp);
            PropertyConfigurator.configure(log4jProp);
        } else {
            System.err.println("*** " + log4jProp + " file not found, so initializing log4j with BasicConfigurator");
            BasicConfigurator.configure();
        }
    }
    super.init(config);
}

干杯

关于tomcat - Tomcat 库和每个 Webapp 中的 log4j,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17888360/

相关文章:

java - 无法将 Log4J 中的事件获取到 Flume 中

log4j - FileAppender 未在 log4j 中写入任何内容

java - Jackrabbit Lucene 索引

Jackrabbit 锁定了许多空位 ACE

java - 命名异常 : Cannot create resource instance with Jackrabbit in Tomcat

java - 将表添加到数据库导致 spring mvc 应用程序中的 tomcat 404 错误

java - 使用 MYSQL 的 Tomcat PooledConnections

java - 为什么我不能从 Eclipse 运行我的 Spring 项目?

java - 如何防止独立 Java webapp 服务器上的热链接?

slf4j 1.7.7 上的 log4j 2.0.2 在启动时找不到 log4j.xml?