Log4j在Java中的使用
一.在JavaSE的用法
1.到官网下载log4j-1.2.17.jar,并把它放到项目的lib下,最后配置路径即可。
2.在src目录下建立配置文件:log4j.xml或者log4j.properties,这样的话log4j会自动在该路径下读取相应的配置文件,完成配置。
3.配置文件的格式
以log4j.properties为例,如下:
#对应的键值对为:类名或实例名或属性
#配置日志使用级别,即debug < info < warn < error < fatal,对于低于所选级别的,将不能输出。下面log.debug()不起作用
#设置两个输出目标:STDOUT,LOGFILE,变量名,随便取,但后面要相同
#格式为:输出最低级别和多个输出目标
log4j.rootLogger=INFO, STDOUT, LOGFILE
#指定第一个为控制台输出,同时所有log输出用转化为System.err输出
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.Target=System.err
log4j.appender.STDOUT.layout=org.apache.log4j.SimpleLayout
#指定第二个为文件输出
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
#指定输出的文件名,在项目路径下建立文件,注意不是在src下
log4j.appender.LOGFILE.File=record.log
#指定输出格式,包括日期
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{yyyy-MM-ddHH:mm:ss} %l %F %p %m%n
4. 测试实例
package test;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
public class Log4jDemo2 {
//以静态方式获取当前类的日志实例,用类初始化,记录当前类的行为
private static Logger log = LogManager.getLogger(Log4jDemo2.class);
public static void main(String[] args){
log.debug("调试阶段");
log.info("提示阶段");
log.warn("警告阶段");
log.error("错误阶段");
}
}
5. 最终在控制台(红字)和项目路径下的日志文件record.log有记录信息。
record.log文件如下:
2015-11-22 03:19:20 test.Log4jDemo2.main(Log4jDemo2.java:11) Log4jDemo2.java INFO 提示阶段
2015-11-22 03:19:20 test.Log4jDemo2.main(Log4jDemo2.java:12) Log4jDemo2.java WARN警告阶段
2015-11-22 03:19:20 test.Log4jDemo2.main(Log4jDemo2.java:13) Log4jDemo2.java ERROR错误阶段
二.在JavaEE中的使用
将log4j-1.2.17.jar放在lib下,将配置文件log4j.properties放在src下。建立一个Servlet,必须含有init(),init()初始化log4j的配置,init在服务器启动时就执行了,且执行一次。在web.xml中要配置初始化参数。输出日志文件路径前要加tomcat的路径变量。
Servlet如下:Log4jInit.java
package myServlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class Log4jInit extends HttpServlet {
private static final long serialVersionUID = 1L;
public void init(){
String path = this.getServletContext().getRealPath("/");
String fileName = this.getInitParameter("log4j_conf_file");
PropertyConfigurator.configure(path+ fileName);
Logger log = LogManager.getLogger(Log4jInit.class);
log.info(path +fileName);
log.info("init" + this.getClass().getName());
}
public Log4jInit() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
response.getWriter().append("Servedat: ").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
doGet(request,response);
}
}
然后在该项目的web.xml下配置servlet。log4j.properties最终会在WEB-INF/classes/下。
<servlet>
<servlet-name>log4j_init</servlet-name>
<servlet-class>myServlet.Log4jInit</servlet-class>
<init-param>
<param-name>log4j_conf_file</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>