我使用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?
答案 0 :(得分:0)
从log4j警告中很明显,在你的应用程序中log4j没有初始化,我不知道你早些时候在你的应用程序中做了什么,但是现在你可以试试这个。 我在我的应用程序中使用了相同的方法,其中所有日志记录jar都存在于服务器lib目录中。
例如:在你的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);
}
干杯