﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-普通人的奇迹-随笔分类-commons</title><link>http://www.blogjava.net/leekiang/category/27953.html</link><description>MDA/MDD/TDD/DDD/DDDDDDD</description><language>zh-cn</language><lastBuildDate>Sun, 06 Apr 2008 08:26:32 GMT</lastBuildDate><pubDate>Sun, 06 Apr 2008 08:26:32 GMT</pubDate><ttl>60</ttl><item><title>commons logging笔记(转)</title><link>http://www.blogjava.net/leekiang/archive/2008/04/05/190986.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Sat, 05 Apr 2008 15:04:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/04/05/190986.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/190986.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/04/05/190986.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/190986.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/190986.html</trackback:ping><description><![CDATA[
		<p>Apache组织开发了一套用于支持Logging的Log4J，Java?1.4版本也引入了一套内置的 Logging框架，如果开发者想在这两套Logging系统之间自由的切换，该怎么办呢？答案就是，使用Commons?Logging。 Commons?Logging定义了一套抽象的Logging接口，用户可以通过配置，使这些接口指向任何一个已存在的Logging系统。</p>
		<p>⑴ 首先在classpath下寻找自己的配置文件commons-logging.properties，如果找到，则使用其中定义的Log实现类；这个属性文件至少必须定义org.apache.commons.logging.Log属性，它的值应该是上述任意Log接口实现的完整限定名称。<br />⑵ 如果上面的步骤失败，Commons的Logging接着检查系统属性org.apache.commons.logging.Log。<br />   System.setProperty("org.apache.commons.logging.Log","org.apache.commons.logging.impl.Log4JLogger");<br />⑶ 如果找不到org.apache.commons.logging.Log系统属性，Logging接着在CLASSPATH中寻找log4j的类。如果找到了，Logging就假定应用要使用的是log4j。不过这时log4j本身的属性仍要通过log4j.properties文件正确配置。<br />通过jar的Service Provider Discovery机制查找 "META-INF/services/org.apache.commons.logging.Log"对应的资源，Service Provider Discovery是JDK1.3之后出现的，我们熟知的XML解析器的查找过程就是利用这个机制.<br />⑷ 如果上述查找均不能找到适当的Logging API，但应用程序正运行在JRE 1.4或更高版本上，则默认使用JRE 1.4的日志记录功能。<br />⑸ 最后，如果上述操作都失败，则应用将使用内建的SimpleLog。SimpleLog把所有日志信息直接输出到System.err。 </p>
		<p>可见，commons-logging总是能找到一个日志实现类，并且尽可能找到一个“最合适”的日志实现类。我说它“很贴心”实际上是因为：1、可以不需要配置文件；2、自动判断有没有Log4j包，有则自动使用之；3、最悲观的情况下也总能保证提供一个日志实现（SimpleLog）。<br />可以看到，commons-logging对编程者和Log4j都非常友好。<br />为了简化配置commons-logging，一般不使用commons-logging的配置文件，也不设置与commons-logging相关的系统环境变量，而只需将Log4j的Jar包放置到classpash中就可以了。这样就很简单地完成了commons-logging与Log4j的融合。如果不想用Log4j了怎么办？只需将classpath中的Log4j的Jar包删除即可。<br />就这么简单！</p>
		<p>Commons logging的关键点：</p>
		<p>    * 提供一个日志记录功能的抽象<br />    * 提供一种从该抽象到具体日志记录实现的映射<br />    * 提供默认的映射和发现机制，提高自身的易用性<br />看花的人多，懂花的少哦。------俺们力争去做懂花人。等老了，一边夕阳西下，一边品茶赏花，岂不乐哉。</p>
		<p>日志的级别从高到低依次为:fatal,error,warn,info,debug,trace.<br />自己只适用三种就够了,调试用debug,运行时有意义的信息用info,错误用error</p>
		<p>log4j.rootLogger是最最重要的一个属性了，它定义日志信息的“输出级别”和“输出目的地”。<br />设置分两部分,第一个逗号之前的是第一部分，指定“输出级别”；后面的是第二部分，指定“输出目的地”。可以同时指定多个“输出目的地”，以逗号隔开。</p>
		<p>不同的appender,打印的基本可以单独设置,例如log4j.appender.logfile.Threshold =debug</p>
		<p>输出格式里%t指线程 </p>
		<p>“同时使用commons-logging和Log4j”的原因是，简化使用和配置。<br />强调一点，“同时使用commons-logging和Log4j”，与“单独使用Log4j”相比，并不会带来更大的学习、配置和维护成本，反而更加简化了我们的工作。我想这也是为什么“所有用到Log4j的项目一般也同时会用到commons-loggin”的原因之一吧。<br />Commons-logging能帮我们做什么？<br />提供一个统一的日志接口，简单了操作，同时避免项目与某个日志实现系统紧密a耦合<br />很贴心的帮我们自动选择适当的日志实现系统（这一点非常好！）它甚至不需要配置</p>
		<p>private static Log log = LogFactory.getLog(YouClassName.class);<br />注意这里定义的是static成员，以避免产生多个实例。<br />LogFactory.getLog()方法的参数使用的是当前类的class，这是目前被普通认为的最好的方式。为什么不写作LogFactory.getLog(this.getClass())？因为static类成员访问不到this指针！<br />将commons-logging和Log4j的jar包都放置到classpath下，同时也将Log4j的配置文件放到classpath中，两者就可以很好的合作。</p>
		<p>采用Log4j配合commons-logging作为日志系统，是目前Java领域非常非常流行的模式，使用非常非常的普遍。两者的结合带来的结果就是：简单 + 强大。<br />commons-logging提供了简捷、统一的接口，不需要额外配置，简单；<br />Log4j功能非常全面、强大；<br />commons-logging仅仅对Log4j(当然还包括其它LOG实现)作了一层包装，具体的日志输出还是在内部转交给身后的Log4j来处理；而Log4j虽然做了所有的事情，却甘作绿叶，从不以真身示人。<br />两者堪称绝配。</p>
		<p># 用于数据库<br />log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender<br />log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test<br />log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver<br />log4j.appender.DATABASE.user=root<br />log4j.appender.DATABASE.password=123<br />log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')<br />log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout<br />log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n</p>
		<p># 发送日志给邮件log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender<br />log4j.appender.MAIL.Threshold=FATAL<br />log4j.appender.MAIL.BufferSize=10<br /><a href="mailto:log4j.appender.MAIL.From=web@www.wuset.com">log4j.appender.MAIL.From=web@www.wuset.com</a><br />log4j.appender.MAIL.SMTPHost=www.wusetu.com<br />log4j.appender.MAIL.Subject=Log4J Message<br /><a href="mailto:log4j.appender.MAIL.To=web@www.wusetu.com">log4j.appender.MAIL.To=web@www.wusetu.com</a><br />log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout<br />log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n</p>
		<p># 应用于控制台<br />log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender<br />log4j.appender.Threshold=DEBUG<br />log4j.appender.CONSOLE.Target=System.out<br />log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout<br />log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<br />#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</p>
		<p>#应用于文件<br />log4j.appender.FILE=org.apache.log4j.FileAppender<br />log4j.appender.FILE.File=file.log<br />log4j.appender.FILE.Append=false<br />log4j.appender.FILE.layout=org.apache.log4j.PatternLayout<br />log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<br /># Use this layout for LogFactor 5 analysis</p>
		<p># 应用于文件回滚<br />log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender<br />log4j.appender.ROLLING_FILE.Threshold=ERROR<br />log4j.appender.ROLLING_FILE.File=rolling.log<br />log4j.appender.ROLLING_FILE.Append=true<br />log4j.appender.ROLLING_FILE.MaxFileSize=10KB<br />log4j.appender.ROLLING_FILE.MaxBackupIndex=1<br />log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout<br />log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n</p>
		<p>#应用于socket<br />log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender<br />log4j.appender.SOCKET.RemoteHost=localhost<br />log4j.appender.SOCKET.Port=5001<br />log4j.appender.SOCKET.LocationInfo=true<br /># Set up for Log Facter 5<br />log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout<br />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</p>
		<p># Log Factor 5 Appender<br />log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender<br />log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000</p>
		<p>#自定义Appender<br />log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender<br />log4j.appender.im.host = mail.cybercorlin.net<br />log4j.appender.im.username = username<br />log4j.appender.im.password = password<br />log4j.appender.im.recipient = <a href="mailto:corlin@cybercorlin.net">corlin@cybercorlin.net</a><br />log4j.appender.im.layout=org.apache.log4j.PatternLayout<br />log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n</p>
<img src ="http://www.blogjava.net/leekiang/aggbug/190986.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-04-05 23:04 <a href="http://www.blogjava.net/leekiang/archive/2008/04/05/190986.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HttpClient 处理header</title><link>http://www.blogjava.net/leekiang/archive/2007/12/07/166091.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Fri, 07 Dec 2007 08:51:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2007/12/07/166091.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/166091.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2007/12/07/166091.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/166091.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/166091.html</trackback:ping><description><![CDATA[1,需要同时使用commons-codec-1.3.jar<br />2,a.jsp<br />&lt;%@ page language="java" pageEncoding="UTF-8"%&gt;<br />&lt;%<br />    response.addHeader("location","beijing");<br />%&gt;<br />3,<br />            HttpClient client = new HttpClient();<br />            HeadMethod headMethod = new HeadMethod(<br />                    "http://localhost:8080/Test/jsp/a.jsp");<br />            client.executeMethod(headMethod);<br />            Header[] headers = headMethod.getResponseHeaders();<br />            System.out.println(headers.length);<br />            for (int i = 0; i &lt; headers.length; i++) {<br />                out.println(headers[i] + " &lt;br&gt;");<br />            }<br />            headMethod.releaseConnection();<br /><br />4,资源:<br />http://hi.baidu.com/toad24/blog/item/6d4e734e4ac2d00bb3de05d3.html<br />AD:http://dev2dev.bea.com.cn/techdoc/20060621823.html#_Toc131329166<br />http认证:http://dev.csdn.net/author/Jason009/769317e872024d0f8a2710141384ba47.html<br />http://www.javaeye.com/topic/84996<br /><img src ="http://www.blogjava.net/leekiang/aggbug/166091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2007-12-07 16:51 <a href="http://www.blogjava.net/leekiang/archive/2007/12/07/166091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>