[Java 3]Java常用语言库之Log4J、Junit及HttpClient

一、Log4J

1.Log4J环境配置。

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

(3)Log4jInit.java

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)
     {    } 
}

1.6、测试。new mypackage1包,new HelloLog4J .java类。

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. 
 


2.Log4J基本使用方法。

Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERRORWARNINFODEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容

Log4j的类图

Logger - 日志写出器,供程序员输出日志信息 
Appender- 日志目的地,把格式化好的日志信息输出到指定的地方去 
Layout- 日志格式化器,用来把程序员的logging request格式化成字符串

ConsoleAppender - 目的地为控制台的Appender 

FileAppender- 目的地为文件的Appender 
RollingFileAppender -目的地为大小受限的文件的Appender 

PatternLayout - 用指定的pattern格式化logging requestLayout


定义配置文件

Log4j提供了灵活的配置方法,一共有两种:

默认调用 BasicConfigurator.configure () 来进行 配置

   如果只是简单的调用BasicConfigurator.configure()来进行配置工作,那么所有的配置都是固定的,不方便以后修改配置

动态配置

Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件(log4j.properties

动态配置
Log4j 提供了 PropertyConfigurator.configure (……) 来动态配置,参数可以是一个 properties 文件所在路径的 String 对象,可以是一个 properties 文件所在路径的 URL 对象,也可以是一个 properties 对象。
如果要用 XML 文件来配置信息,则 可用 DOMConfigurator configure 函数 来从一个 XML 文件中加载配置信息

使用 Java 特性文件做为 配置文件
配置根 Logger

   语法:log4j.rootLogger = [ level ],appenderName,appenderName,

    其中level是日志记录的优先级,分为OFFFATALERRORWARNINFODEBUGALL或者自己定义的级别Log4j建议只使用四个级别,优先级从高到低分别是ERRORWARNINFODEBUG通过在这里定义的级别,可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。appenderName就是指日志信息输出到哪个地方。可以同时指定多个输出目的地。

使用 Java 特性文件做为 配置文件
配置日志信息输出目的地 Appender

语法:

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(将日志信息以流格式发送到任意指定的地方)

For example:

输出到控制台,同时输出 为文本文件或 HTML 文件


使用 Java 特性文件做为 配置文件
配置日志信息的格式( 布局)

语法:

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(包含日志产生的时间、线程、类别等等信息

Forexample:

自定义输出样式

输出结果



使用XML文件做为配置文件



二、HttpClient

HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源
HttpClient Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议
Commons HttpClient 现在已停止维护 , 它被 HttpComponents   Client 替代( Commons HttpClient 3.x 继承而来

HttpClient 不是一个浏览器,它是一个客户端 HTTP 传输类库。 HttpClient 作用是传输和接收 HTTP 消息。
HttpClient 不会去缓存内容,执行嵌入在 HTML 页面中的 javascript 代码,猜测内容类型,重新格式化请求 / 重定向 URI ,或者其它和 HTTP 运输无关的功能
0.使用HttpClient步骤

创建 HttpClient 实例
创建 某种连接方法的 实例,在连接的 构造函数中传入待连接的 地址
调用 第一步中创建好的实例的 execute 方法来执行第二步中创建 好的连接方法实例
读取应答信息 response
释放连接。无论执行方法是否成功,都必须释放 连接
处理应答信息
1、首先配置相关文件。在http://hc.apache.org/downloads.cgi下载HttpClient相关的.jar包,解压后把lib文件下的所有jar都导入到工程中。导入方法如(一、Log4J)。

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:百度一下,你就知道      













------------------------------


3、HTTP请求

所有 HTTP 请求有一个组合了 方法名 请求 URI HTTP 协议版本 的请求行
HttpClient 支持所有定义在 HTTP/1.1 版本中的 HTTP 方法: GET HEAD POST PUT DELETE TRACE OPTIONS 。对于每个方法类型都有一个特殊的 类。
请求的 URI 是统一资源定位符,它标识了应用 于请求 之上的 资源。

4、HTTP响应

HTTP 响应是由服务器在接收和解释请求报文之后返回发送给客户端的报文
响应报文的第一行包含了协议版本,之后是数字状态码和相关联的文本段 。(如 HTTP/1.1 200 OK

5、处理报文头部

一个 HTTP 报文可以包含很多描述如内容长度,内容类型等信息属性的头部信息
HttpClient 提供获取,添加,移除和枚举头部信息的方法

6、HTTP实体

HTTP 报文可以携带和请求或响应相关的内容 实体,内容实体是可选的。
使用了实体的请求被称为封闭实体请求。 HTTP 规范定义了两种封闭实体的方法: POST PUT
响应 通常期望包含一个内容实体。

使用 HTTP 实体
要从实体中读取内容或向实体写入内容,可以初始化 HttpEntity 实例,使用 getContent () writeTo ( OutputStream ) 方法。
也可以利用 getContentType () getContentLength () 等方法来获取实体报头的信息。

7、确保低级别资源释放
当完成一个响应实体,那么保证所有实体内容已经被完全消耗是很重要的 这样 连接 可以安全的放回到连接池中,而且可以通过连接管理器对后续的请求重用连接
处理这个操作的最方便的方法是调用 HttpEntity consumeContent () 方法来消耗流中的任意可用内容。 HttpClient 探测到内容流尾部已经到达后,会立即会自动释放低层连接,并放回到连接管理器
当整个响应内容的一小部分需要 获取, 可以仅仅通过调用 HttpUriRequest abort () 方法来中止 请求
连接不会被重用,但是由它持有的所有级别的资源将会被正确 释放

8、参数传递
有时在提交请求时需要设定页面所需要的参数
传递参数可以通过 Get Post
8.1、Get 请求传递 参数
方法一: 将查询字符串作为请求地址的 一部分

  这是一种最简单的传参方式,将查询参数用(&)连接,然后放在请求地址?的后面,如下面这个请求地址

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/");

方法二: 使用 URI 携带查询 字符串
8.2、 Post请求传递参数请求
Get Post 在传递参数时有一些区别, Get 请求的参数作为查询 字符串传递 ,而 Post 请求的参数则作为实体传递  






你可能感兴趣的:([Java 3]Java常用语言库之Log4J、Junit及HttpClient)