最近做j2ee的时候:运行tomcat后总是出现:
log4j:WARN No appenders could be found for logger (samp.Test1).
log4j:WARN Please initialize the log4j system properly.
查阅资料:搞清问题还是出在日志配置文件的初始化的时候,也就是该应用程序找不到log4j.properties.那么我们针对这个症结来解决!
查了很多资料,解决方案一大堆,不过真要解决实际问题,那还得以实而论,我这个程序就只是为了解决这个警告,最简单的就是将debug信息输出到控制台,那就可以这样写:
下面这个是先初始化log
import com.foo.Bar;
// Import log4j classes.
import org.apache.log4j.Logger;
import org.apache.log4j.BasicConfigurator;
public class MyApp {
// Define a static logger variable so that it references the
// Logger instance named "MyApp".
static Logger logger = Logger.getLogger(MyApp.class);
public static void main(String[] args) {
// Set up a simple configuration that logs on the console.
BasicConfigurator.configure();
logger.info("Entering application.");
Bar bar = new Bar();
bar.doIt();
logger.info("Exiting application.");
}
}
接着我们就可以直接用了:
package com.foo;
import org.apache.log4j.Logger;
public class Bar {
static Logger logger = Logger.getLogger(Bar.class);
public void doIt() {
logger.debug("Did it again!");
}
}
说到底最关键的还是BasicConfigurator.configure();
在我们的web合适的地方加上这句,就可以在控制台看到我们的调试信息了!
另外一种我们要写入到我们的调试文件:就这样写了.
我们写个这样的初始化properties的类:
package com.foo; import org.apache.log4j.PropertyConfigurator; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.io.IOException; public class Log4jInit extends HttpServlet { public void init() { String prefix = getServletContext().getRealPath("/"); String file = getInitParameter("log4j-init-file"); // if the log4j-init-file is not set, then no point in trying if(file != null) { PropertyConfigurator.configure(prefix+file); } } public void doGet(HttpServletRequest req, HttpServletResponse res) { } }
在配置文件中这样写:
<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>com.foo.Log4jInit</servlet-class>
<init-param>
<param-name>log4j-init-file</param-name>
<param-value>WEB-INF/classes/log4j.lcf</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
这样警告就离我远去了!
上面这两个例子只是针对Hibernate中加的log,当然可能因为所用的eclipse版本不一样会有些差别.
比如在用spring的时候也会有这个问题,那么我们解决的时候,就可以按照大虾们介绍的:
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/config/log4j.properties</param-value>
</context-param>
······
<!-- 定义LOG4J监听器 -->
<listener>
<listener-class>
org.springframework.web.util.Log4jConfigListener
</listener-class>
</listener>
当然还有的说在ContextLoaderListener改为SpringContextServle等等,这些问题还是哪句话,事实而论!
更多介绍参见: