log4j的使用详细解析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
log4j的使⽤详细解析
Log4j可以通过java程序动态设置,该⽅式明显缺点是:如果需要修改⽇志输出级别等信息,则必须修改java⽂件,然后重新编译,很是⿇烦;
log4j也可以通过配置⽂件的⽅式进⾏设置,⽬前⽀持两种格式的配置⽂件:
•xml⽂件
•properties⽂件(推荐)
下⾯是⼀个log4j配置⽂件的完整内容:
复制代码代码如下:
log4j.rootCategory=INFO, stdout
log4j.rootLogger=info, stdout
### stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
yout=org.apache.log4j.PatternLayout
yout.ConversionPattern=%d{ABSOLUTE} %5p - %m%n
### set package ###
.springframework=info
.apache.catalina=info
mons.digester.Digester=info
.apache.catalina.startup.TldConfig=info
log4j.logger.chb.test=debug
根logger主要定义log4j⽀持的⽇志级别及输出⽬的地,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
其中,level 是⽇志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者⾃定义的级别。
建议只使⽤四个级别,优先级从⾼到低分别是ERROR、WARN、INFO、DEBUG。
appenderName指定⽇志信息输出到哪个地⽅,可同时指定多个输出⽬的地。
Appender主要定义⽇志信息输出在什么位置,主要语法为:
复制代码代码如下:
log4j.appender.appenderName = classInfo
log4j.appender.appenderName.option1 = value1
…
log4j.appender.appenderName.optionN = valueN
Log4j提供的appender有以下⼏种:
•org.apache.log4j.ConsoleAppender(控制台),
•org.apache.log4j.FileAppender(⽂件),
•org.apache.log4j.DailyRollingFileAppender(每天产⽣⼀个⽇志⽂件),
•org.apache.log4j.RollingFileAppender(⽂件⼤⼩到达指定尺⼨的时候产⽣⼀个新的⽂件)
•org.apache.log4j.WriterAppender(将⽇志信息以流格式发送到任意指定的地⽅)
以ConsoleAppender为例,如:
复制代码代码如下:
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
Layout 负责格式化Appender的输出,其语法为:
复制代码代码如下:
yout = classInfo
yout.option1 = value1
…
yout.optionN = valueN
其中,Log4j提供的layout有以下⼏种:
•org.apache.log4j.HTMLLayout(以HTML表格形式布局),
•org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
•org.apache.log4j.SimpleLayout(包含⽇志信息的级别和信息字符串)
•org.apache.log4j.TTCCLayout(包含⽇志产⽣的时间、线程、类别等等信息)
可以设置不同package的⽇志输出级别,语法为:
log4j.logger.packageName=level
其中,packageName为实际的包名,level为⽇志级别,例如:
复制代码代码如下:
.springframework=info
.apache.catalina=info
mons.digester.Digester=info
.apache.catalina.startup.TldConfig=info
log4j.logger.chb.test=debug
Spring真是不错,替我们做了很多事情,如果系统使⽤了spring框架,则要集成log4j就很简单了,主要分为3个步骤,如下:复制代码代码如下:
log4j.rootCategory=INFO, stdout
log4j.rootLogger=info, stdout
### stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
yout=org.apache.log4j.PatternLayout
yout.ConversionPattern=%d{ABSOLUTE} %5p - %m%n
### log to file ###
.springframework=info
.apache.catalina=info
mons.digester.Digester=info
.apache.catalina.startup.TldConfig=info
log4j.logger.chb.test=debug
监听器需要定义在web.xml,主要包括:定义log4j配置⽂件⽬录、log4j监听器,如下:
复制代码代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="/xml/ns/j2ee"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/xml/ns/j2ee
/xml/ns/j2ee/web-app_2_4.xsd">
<!--由Spring载⼊的Log4j配置⽂件位置-->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/applicationContext*.xml
</param-value>
</context-param>
<!--Spring log4j Config loader-->
<listener>
<listener-class>
org.springframework.web.util.Log4jConfigListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>InitiaServlet</servlet-name>
<servlet-class>chb.test.web.InitiaServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
复制代码代码如下:
package com.dheaven.mip.web;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.log4j.Logger;
public class InitiaServlet extends HttpServlet {
protected Logger log = Logger.getLogger(InitiaServlet.class);
private static final long serialVersionUID = 8550329576989690578L; /**
* Constructor of the object.
*/
public InitiaServlet() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy();
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occure
*/
public void init() throws ServletException {
log.debug("服务器启动了,log4j开始⼯作了");
}
}
如果系统没有使⽤spring,我们以servlet为例,很简单,⼤家按照步骤执⾏即可,只贴代码,不说废话。
放在web⼯程的WEB-INF⽬录下,内容如:
复制代码代码如下:
log4j.rootCategory=INFO, stdout
log4j.rootLogger=info, stdout
### stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
yout=org.apache.log4j.PatternLayout
yout.ConversionPattern=%d{ABSOLUTE} %5p - %m%n
### set package ###
.apache.catalina=info
mons.digester.Digester=info
.apache.catalina.startup.TldConfig=info
.dheaven=debug
复制代码代码如下:
package com.dheaven.mip.web;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.log4j.PropertyConfigurator;
public class InitLog4j extends HttpServlet {
private static final long serialVersionUID = 1L;
public void init() throws ServletException {
String prefix = getServletContext().getRealPath("/");
prefix = prefix.replace("//", "/");
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);
}
}
}
复制代码代码如下:
<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>chb.test.web.InitLog4j</servlet-class>
<init-param>
<param-name>log4j-init-file</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
复制代码代码如下:
package chb.test.web;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.log4j.Logger;
public class InitiaServlet extends HttpServlet {
protected Logger log = Logger.getLogger(InitiaServlet.class);
private static final long serialVersionUID = 8550329576989690578L; /**
* Constructor of the object.
*/
public InitiaServlet() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy();
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occure
*/
public void init() throws ServletException {
log.debug("服务器启动了,log4j开始⼯作了");
}
}。