1.1、在apache网站:http://logging.apache.org/log4j/1.2/download.html可以免费下载到Log4j最新版本的软件包。我下载的为:log4j-1.2.17.tar.gz。
1.2、解压,主要用里面的log4j-1.2.17.jar文件包。
1.3、创建Java project:Log4JTest。然后File>Import>File System>...>log4j-1.2.17.jar(找到jar路径,然后选中导入)。
1.4、右键项目Log4JTest>Properties>Java Build Path>Libraries>Add JARs,导入log4j-1.2.17.jar即可。
1.5、相关文件,在项目的src目录中添加三个文件:log4j.properties、web.xml、Log4Init.java。内容如下。
(1)log4j.properties
#Console config
#OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL
#log4j.rootLogger=error, stdout, R
#log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#log4j.appender.stdout.layout.ConversionPattern=<%d>{yyyy MMM dd HH:mm:ss,SSS} <%-5p> <%c> <%t> - %m(%F:%M:%L)%n
#log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.R.File=f:\\qc.log
#log4j.appender.R.layout=org.apache.log4j.PatternLayout
#log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n
log4j.rootLogger=DEBUG,CONSOLE
#,A1,im
log4j.addivity.org.apache=true
# 应用于控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m %n
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n
#应用于文件
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=f:\\file.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# Use this layout for LogFactor 5 analysis
# 应用于文件回滚
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=f:\\rolling.log
#文件位置,也可以用变量${java.home}、rolling.log
log4j.appender.ROLLING_FILE.Append=true
#true:添加 false:覆盖
log4j.appender.ROLLING_FILE.MaxFileSize=10KB
#文件最大尺寸
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
#备份数
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#应用于socket
#log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
#log4j.appender.SOCKET.RemoteHost=localhost
#log4j.appender.SOCKET.Port=5001
#log4j.appender.SOCKET.LocationInfo=true
# Set up for Log Facter 5
#log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
#log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n
# Log Factor 5 Appender
#log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
#log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000
# 发送日志给邮件
# log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
# log4j.appender.MAIL.Threshold=FATAL
# log4j.appender.MAIL.BufferSize=10
# [email protected]
# log4j.appender.MAIL.SMTPHost=www.wusetu.com
# log4j.appender.MAIL.Subject=Log4J Message
# [email protected]
# log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
# log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# 用于数据库
#log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
#log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
#log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
#log4j.appender.DATABASE.user=root
#log4j.appender.DATABASE.password=
#log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
#log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
#log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout
#自定义Appender
#log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
#log4j.appender.im.host = mail.cybercorlin.net
#log4j.appender.im.username = username
#log4j.appender.im.password = password
#log4j.appender.im.recipient = [email protected]
#log4j.appender.im.layout=org.apache.log4j.PatternLayout
#log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
(2)web.xml
#Console config
#OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL
#log4j.rootLogger=error, stdout, R
#log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#log4j.appender.stdout.layout.ConversionPattern=<%d>{yyyy MMM dd HH:mm:ss,SSS} <%-5p> <%c> <%t> - %m(%F:%M:%L)%n
#log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.R.File=f:\\qc.log
#log4j.appender.R.layout=org.apache.log4j.PatternLayout
#log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n
log4j.rootLogger=DEBUG,CONSOLE
#,A1,im
log4j.addivity.org.apache=true
# 应用于控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m %n
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n
#应用于文件
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=f:\\file.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# Use this layout for LogFactor 5 analysis
# 应用于文件回滚
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=f:\\rolling.log
#文件位置,也可以用变量${java.home}、rolling.log
log4j.appender.ROLLING_FILE.Append=true
#true:添加 false:覆盖
log4j.appender.ROLLING_FILE.MaxFileSize=10KB
#文件最大尺寸
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
#备份数
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#应用于socket
#log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
#log4j.appender.SOCKET.RemoteHost=localhost
#log4j.appender.SOCKET.Port=5001
#log4j.appender.SOCKET.LocationInfo=true
# Set up for Log Facter 5
#log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
#log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n
# Log Factor 5 Appender
#log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
#log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000
# 发送日志给邮件
# log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
# log4j.appender.MAIL.Threshold=FATAL
# log4j.appender.MAIL.BufferSize=10
# [email protected]
# log4j.appender.MAIL.SMTPHost=www.wusetu.com
# log4j.appender.MAIL.Subject=Log4J Message
# [email protected]
# log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
# log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# 用于数据库
#log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
#log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
#log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
#log4j.appender.DATABASE.user=root
#log4j.appender.DATABASE.password=
#log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
#log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
#log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout
#自定义Appender
#log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
#log4j.appender.im.host = mail.cybercorlin.net
#log4j.appender.im.username = username
#log4j.appender.im.password = password
#log4j.appender.im.recipient = [email protected]
#log4j.appender.im.layout=org.apache.log4j.PatternLayout
#log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
package test;
import org.apache.log4j.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@SuppressWarnings("serial")
public class Log4jInit extends HttpServlet {
public void init() {
String prefix =getServletContext().getRealPath("/");
String file = getInitParameter("log4j");//配置文件位置
if(file != null) {
PropertyConfigurator.configure(prefix+file);
}
}
public void doGet(HttpServletRequest req, HttpServletResponse res)
{ }
}
package Log4JPackage;
import org.apache.log4j.Logger;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.PropertyConfigurator;
public class HelloLog4J {
private static Logger log = Logger.getLogger(HelloLog4J.class);
public static void main(String args[]){
PropertyConfigurator.configure("E:/software/eclipse/ejavafile/Log4JTest/src/log4j.properties");//读取配置信息
log.debug("This is a debug message.");//插入记录信息
log.info("This is info message.");
log.error("This is error message.");
}
}
[framework] 2012-11-16 14:34:25,042 - Log4JPackage.HelloLog4J -0 [main] DEBUG Log4JPackage.HelloLog4J - This is a debug message.
[framework] 2012-11-16 14:34:25,042 - Log4JPackage.HelloLog4J -0 [main] INFO Log4JPackage.HelloLog4J - This is info message.
[framework] 2012-11-16 14:34:25,042 - Log4JPackage.HelloLog4J -0 [main] ERROR Log4JPackage.HelloLog4J - This is error message.
Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。
Log4j的类图
Logger - 日志写出器,供程序员输出日志信息
Appender- 日志目的地,把格式化好的日志信息输出到指定的地方去
Layout- 日志格式化器,用来把程序员的logging request格式化成字符串
ConsoleAppender - 目的地为控制台的Appender
FileAppender- 目的地为文件的Appender
RollingFileAppender -目的地为大小受限的文件的Appender
PatternLayout - 用指定的pattern格式化logging request的Layout
Log4j提供了灵活的配置方法,一共有两种:
如果只是简单的调用BasicConfigurator.configure()来进行配置工作,那么所有的配置都是固定的,不方便以后修改配置。
Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件(log4j.properties)
语法:log4j.rootLogger = [ level ],appenderName,appenderName,…
其中,level是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自己定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。appenderName就是指日志信息输出到哪个地方。可以同时指定多个输出目的地。
语法:
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1= value1
…
log4j.appender.appenderName.option=valueN
其中,Log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
语法:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1= value1
…
log4j.appender.appenderName.layout.option=valueN
其中,Log4j提供的layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
自定义输出样式
使用XML文件做为配置文件
2、new project一个HttpClientDemo,new package一个mypackage、new class一个HttpClientTest。
代码:
package mypackage;
import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.ParseException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
public class HttpClientTest {
public static void main(String[] args) throws ParseException, IOException{
//创建默认的httpClient实例
HttpClient httpclient = new DefaultHttpClient();
try{
//创建httpget
HttpGet httpget = new HttpGet("http://www.baidu.com/");
System.out.println("executing request "+httpget.getURI());
//执行get请求
HttpResponse response = httpclient.execute(httpget);
//获取响应实体
HttpEntity entity = response.getEntity();
System.out.println("----------------------------");
//打印响应状态
System.out.println(response.getStatusLine());
if(entity != null){
//打印响应内容长度
System.out.println("Response content length:"+ entity.getContentLength());
//打印响应内容
System.out.println("Response content:"+EntityUtils.toString(entity));
System.out.println("------------------------------");
}
}finally{
httpclient.getConnectionManager().shutdown();
}
}
}
executing request http://www.baidu.com/
----------------------------
HTTP/1.1 200 OK
Response content length:9803
Response content:百度一下,你就知道
------------------------------
5、处理报文头部
这是一种最简单的传参方式,将查询参数用(&)连接,然后放在请求地址?的后面,如下面这个请求地址
http://www.baidu.com/s?wd=w3school&rsv_spt=1&issp=1&rsv_bp=0&ie=utf-8
HttpGet httpget = new HttpGet("http://www.baidu.com/");