0

我使用 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 和我的 Web 应用程序都不会生成任何日志记录语句。

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

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

4

1 回答 1

0

从 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);
}

干杯

于 2013-07-29T20:08:13.767 回答