从 log4j 警告中可以清楚地看出,在您的应用程序中 log4j 未初始化,我不确定您之前在应用程序中的表现如何,但现在您可以尝试一下。我在我的应用程序中使用了相同的方法,其中所有日志记录 jar 都存在于服务器 lib 目录中。
- 将 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);
}
干杯