Tomcat lib和每个Webapp中的log4j

时间:2013-07-26 18:21:35

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

我尝试将log4j.xml配置添加到lib目录,没有去。还尝试直接在长耳兔罐子里加入它,但没有运气。

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

1 个答案:

答案 0 :(得分:0)

从log4j警告中很明显,在你的应用程序中log4j没有初始化,我不知道你早些时候在你的应用程序中做了什么,但是现在你可以试试这个。 我在我的应用程序中使用了相同的方法,其中所有日志记录jar都存在于服务器lib目录中。

  1. 将log4j.properties放在项目WEB-INF目录中,并要求servlet在应用程序启动期间初始化它。您可以编写一个启动servlet,在init方法中,您可以将此属性文件作为参数传递给init。
  2. 例如:在你的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);
    }
    

    干杯