摘要:   1<script language="JavaScript" type="text/JavaScript">   2// 日期选择   3// By Ziyue(http://www.web-v.com/)   4var months&n...  阅读全文
posted @ 2009-03-27 17:03 勒紧皮带向前冲 阅读(443) | 评论 (0)编辑 收藏
 
 
2008-12-23 17:09:31 原文地址: http://blog.sina.com.cn/u/4a1347d50100bmv8 [查看原文]

1。每天11:00点前睡觉,每天7:30点前起床;
2。每天提醒自己,不要忘记梦想;


3。有时间多看书,多学习,做一个有文学素养的 人,不要把时间浪费在滑稽怪诞的事情上;

4。多锻炼身体,身体垮了什么都没有了,男人女人要对自己好一点;

5。努力学习赚钱的本领,钱是一个人活着的根本,是做人的尊严;

6。常回家看看老妈,常给姐姐哥哥电话,亲情是最珍贵的感情;

7。要学会做个倾听者,要多听听别人的感受,从中获得教训;

8。要学会玩,学会有品位的玩;

9。工作上的烦恼,不要带回家,解决不了任何问题,带回来会平添更多烦恼;

10。做工作的有心人;

11。学会奉承领导,多摆笑脸,不做恶人,三缄其口,三思而后行;

12。学会推拖事情,人善被人欺,马善被人骑;

13。不和没素养的人交往,免得受其影响;

14。不与小气的人交往,吃亏的总是自己;

15。对装B的人要一棒子打死,让他(她)下次再也牛不起来!

16。不与已婚人或者已经同居的人谈感情,多半是浪费口舌,最后没什么收获,反而打击自己的生活激情;

17。要寻找与自己有共同价值观的人,爱自己的人,好好珍惜,好好保护,终了一生;

18。不要把感情浪费在没有希望的人身上,看重外在的人永远都是弱智,只有在伤痕累累时才明白,真正爱她的人原来一直在她身边关注她,而她却一直以为幸福很遥远;

19。不要过分将就一个人,过分将就不是爱情,是犯贱;

20。现实一点,爱情在现实面前总是那么苍白,浪漫的爱情不属于男人,属于女人;

21。做婚姻的有心人,好好准备步入婚姻,好好准备做一个好丈夫好妻子;

22。做生活的有心人,用心准备营造一个美好的家庭,一个安全温馨的家庭;

23。不要老是想做救世主,就算是救世主,也没必要去拯救世人。可怜之人,必有可恨之处,而且都是犹大;

24。不要轻易借钱给别人,借钱的人,许多都不想还钱;

25。要明白读过很多书的人不一定有很多知识,没上过学的人却不一定是文盲;

26。不要以貌取人,特别是女人,漂亮的也许是个魔鬼,
丑陋的却可能是天使,上天总是公平的;

27。要做回自己,为自己活着;

28。要会装扮自己,邋遢不是一个酷的表现,是没教养的结果;

29。走自己的路,让NB说破嘴皮吧;

30。赚别人的钱,让贫穷见鬼去吧

posted @ 2009-03-16 16:17 勒紧皮带向前冲 阅读(160) | 评论 (0)编辑 收藏
 

ConvertUtils,这个工具类的职能是在字符串和指定类型的实例之间进行转换。

 

 

目前支持的类型有:

 

 

  • java.lang.BigDecimal

     

  • java.lang.BigInteger

     

  • boolean and java.lang.Boolean

     

  • byte and java.lang.Byte

     

  • char and java.lang.Character

     

  • java.lang.Class

     

  • double and java.lang.Double

     

  • float and java.lang.Float

     

  • int and java.lang.Integer

     

  • long and java.lang.Long

     

  • short and java.lang.Short

     

  • java.lang.String

     

  • java.io.File

     

  • java.net.URL

     

  • java.sql.Date

     

  • java.sql.Time

     

  • java.sql.Timestamp

     

总体提供两类功能:

 

 

1.         将字符串转换为指定类型;

 

 

2.         注册、注销和查询类型转换器;

convert(java.lang.Object value)

将任意的实例转变为String,用法非常简单。在尝试的过程中,感觉与调用实例上的toString()方法的效果一样,不知道是不是在这个方法内仅仅是调用了传入实例的toString()方法。

ps:需要读源代码才能清楚。

convert(java.lang.String value, java.lang.Class clazz)

 

将字符串value转换为clazz的一个实例;如果失败的话,就以String的形式返回value

 

 

convert(java.lang.String[] values, java.lang.Class clazz)

 

这个方法是对前一方法的加强版,将数组中的每个value都进行转换,最后以Object返回。(数组也是Object啊)

 

 

deregister()和deregister(java.lang.Class clazz)

注销转换器,前者将所有的转换器注销掉,后者只注销对应于clazz的转换器。注销在这里不是彻底删除了,而是将转换器变为默认的转换器(apache commons提供的)。

lookup(java.lang.Class clazz)

获取指定类型clazz的转换器.

register(Converter converter, java.lang.Class clazz)

为指定类型clazz注册转换器converter。如果clazz已经存在一个对应的转换器,那么converter,将覆盖原来的转换器。也就是说,我们可以为String,Double创建自定义的类型转换器,并在注册后进行使用。

ps:apache的类定义明确,描述非常清楚,所以就不贴出例子了。当然这只是到达可以正常使用的阶段,如果要进行改造或者创建自己的ConvertUtils,那可能需要更多的时间,因为还要去参考ConvertUtilsBean,这里就不详述了。

以下为使用convertUtils的一个DATE类型的例子(该例子来源于尚学堂视屏)
1.定义converter

 1package com.bjsxt.oa.web;
 2
 3import java.text.ParseException;
 4import java.text.SimpleDateFormat;
 5import java.util.Date;
 6
 7import org.apache.commons.beanutils.Converter;
 8
 9public class UtilDateConverter implements Converter {
10    
11    private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
12
13    public Object convert(Class type, Object value) {
14        if (value == null{
15            return value;
16        }

17        if (value instanceof Date) {
18            return value;
19        }

20        if (value instanceof String) {
21            try {
22                return format.parse((String)value);
23            }
 catch (ParseException e) {
24                e.printStackTrace();
25            }

26        }

27        return null;
28    }

29
30}

31
2.使用convertUilts注册converter
 1package com.bjsxt.oa.web;
 2
 3import java.util.Date;
 4
 5import javax.servlet.ServletException;
 6import javax.servlet.http.HttpServlet;
 7
 8import org.apache.commons.beanutils.ConvertUtils;
 9
10public class UtilDateConverterInitServlet extends HttpServlet {
11
12    @Override
13    public void init() throws ServletException {
14         ConvertUtils.register(new UtilDateConverter(), Date.class);
15    }

16
17}

18
3.在web.xml中配置servlet
1 <servlet>
2    <servlet-name>utilDateConverter</servlet-name>
3    <servlet-class>com.bjsxt.oa.web.UtilDateConverterInitServlet</servlet-class>
4    <load-on-startup>3</load-on-startup>
5  </servlet>  
posted @ 2009-03-04 10:36 勒紧皮带向前冲 阅读(2900) | 评论 (0)编辑 收藏
 
org.apache.commons.beanutils.BeanUtils
 
一、简介:

BeanUtils提供对 Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很 多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。

二、用法:

BeanUtils是这个包里比较常用的一个工具类,这里只介绍它的copyProperties()方法。该方法定义如下:

public static void copyProperties(java.lang.Object dest,java.lang.Object orig)
    throws java.lang.IllegalAccessException,
           java.lang.reflect.InvocationTargetException


如 果你有两个具有很多相同属性的JavaBean,一个很常见的情况就是Struts里的PO对象(持久对象)和对应的ActionForm,例如 Teacher和TeacherForm。我们一般会在Action里从ActionForm构造一个PO对象,传统的方式是使用类似下面的语句对属性逐 个赋值:

//得到TeacherForm
TeacherForm teacherForm=(TeacherForm)form;
//构造Teacher对象
Teacher teacher=new Teacher();
//赋值
teacher.setName(teacherForm.getName());
teacher.setAge(teacherForm.getAge());
teacher.setGender(teacherForm.getGender());
teacher.setMajor(teacherForm.getMajor());
teacher.setDepartment(teacherForm.getDepartment());

//持久化Teacher对象到数据库
HibernateDAO=;
HibernateDAO.save(teacher);

而使用BeanUtils后,代码就大大改观了,如下所示:
//得到TeacherForm
TeacherForm teacherForm=(TeacherForm)form;
//构造Teacher对象
Teacher teacher=new Teacher();
//赋值
BeanUtils.copyProperties(teacher,teacherForm);
//持久化Teacher对象到数据库
HibernateDAO=;
HibernateDAO.save(teacher);


如 果Teacher和TeacherForm间存在名称不相同的属性,则BeanUtils不对这些属性进行处理,需要程序员手动处理。例如 Teacher包含modifyDate(该属性记录最后修改日期,不需要用户在界面中输入)属性而TeacherForm无此属性,那么在上面代码的 copyProperties()后还要加上一句:

teacher.setModifyDate(new Date());


怎 么样,很方便吧!除BeanUtils外还有一个名为PropertyUtils的工具类,它也提供copyProperties()方法,作用与 BeanUtils的同名方法十分相似,主要的区别在于后者提供类型转换功能,即发现两个JavaBean的同名属性为不同类型时,在支持的数据类型范围 内进行转换,而前者不支持这个功能,但是速度会更快一些。BeanUtils支持的转换类型如下:

      * java.lang.BigDecimal
      * java.lang.BigInteger
      * boolean and java.lang.Boolean
      * byte and java.lang.Byte
      * char and java.lang.Character
      * java.lang.Class
      * double and java.lang.Double
      * float and java.lang.Float
      * int and java.lang.Integer
      * long and java.lang.Long
      * short and java.lang.Short
      * java.lang.String
      * java.sql.Date
      * java.sql.Time
      * java.sql.Timestamp


这里要注意一点,java.util.Date是不被支持的,而它的子类java.sql.Date是被支持的。因此如果对象包含时间类型的属性,且希望被转换的时候,一定要使用java.sql.Date类型。否则在转换时会提示argument mistype异常。

三、优缺点:

Apache Jakarta Commons项目非常有用。我曾在许多不同的项目上或直接或间接地使用各种流行的commons组件。其中的一个强大的组件就是BeanUtils。我 将说明如何使用BeanUtils将local实体bean转换为对应的value 对象:


BeanUtils.copyProperties(aValue, aLocal)


上 面的代码从aLocal对象复制属性到aValue对象。它相当简单!它不管local(或对应的value)对象有多少个属性,只管进行复制。我们假设 local对象有100个属性。上面的代码使我们可以无需键入至少100行的冗长、容易出错和反复的get和set方法调用。这太棒了!太强大了!太有用 了!

现在,还有一个坏消息:使用BeanUtils的成本惊人地昂贵!我做了一个简单的测试,BeanUtils所花费的时间要超过取数 据、将其复制到对应的 value对象(通过手动调用get和set方法),以及通过串行化将其返回到远程的客户机的时间总和。所以要小心使用这种威力!
该文章的原文地址为:http://lifejava.spaces.live.com/Blog/cns!A666C33543221640!158.entry
posted @ 2009-03-04 09:53 勒紧皮带向前冲 阅读(2874) | 评论 (0)编辑 收藏
 
(1)用文本编辑器打开<Tomcat主目录>/conf目录下的Server.xml文件,使用“查找”菜单查找内容为“</Host>”的行,紧接该行下面增加一对<Host></Host>标签。参照前面的<Host>标签的属性设置情况,设置新增的<Host>标签的属性,并在它里面嵌套一个设置该WEB站点根目录的<Context>元素,最终的内容如下:
<Host name="www.xydesign.cn" debug="0" appBase="d:\site1">
<Context path="" docBase="." debug="0"/>
</Host>
这样,将创建一个新的WEB站点。上面的<Context>元素的docBase属性值被设置为一个点(.),即表示使用<Host>元素的appBase属性中所设置的路径作为这个<Context>所映射的目录。

    (2)在上面新增的<Host></Host>标签对下面再增加一对<Host></Host>标签,并将它设置为如下形式:
<Host name="www.xydesign.net.cn" debug="0" appBase="d:\site2">
<Context path="" docBase="." debug="0"/>
</Host>
这又创建了一个新的WEB站点,该站点的主机名称为www.xydesign.net.cn,根目录对应的本地文件系统目录为d:\site2。

    (3)在d:盘下创建名称为site1和site2两个目录,并在这两个目录中分别创建一个名为test.html的文件,在d:\site1\test.html文件中写入如下一行内容:
这是d:\site1目录中的test.html文件
在d:\site2\test.html文件中写入如下一行内容:
这是d:\site2目录中的test.html文件

    (4)用记事本程序打开c:\winnt\System32\Drivers\Etc\Hosts文件,可以看到有如下一行内容:
127.0.0.1       localhost
紧接这行文本的下面,用它复制出两行文本,并将这两行文本中的localhost分别修改成www.xydesign.cn和www.xydesign.net.cn,这样,就使用Hosts文件为当前计算机设置了多个主机名。如果要用www.xydesign.cn和www.xydesign.net.cn这个两主机名访问其他计算机上的WEB站点,则应将127.0.0.1修改成其他计算机的实际IP地址。保存Hosts文件后,Hosts文件的内容如下:
127.0.0.1                  localhost
202.104.125.154       www.xydesign.cn
202.104.125.154       www.xydesign.net.cn

其中202.104.125.154为您服务器的固定IP地址。

在命令行窗口中执行“ping www.xydesign.cn”和“ping www.xydesign.net.cn”命令,查看该主机名是否被正确解析到了相应的IP地址上。建立site1和site2与计算机IP地址的映射后,在IE浏览器地址栏中输入http://localhost:8080/test.html、http://www.xydesign.cn:8080/test.html和http://www.xydesign.net.cn:8080/test.html,可以看到浏览器将显示出各自站点中的test.html网页文件的内容。
如需不要后面的8080端口号,可直接把tomcat端口号设置为80即可。

   (5)设置域名www.xydesign.cn    www.xydesign.net.cn 的解析IP地址都为202.104.125.154(即您服务器的IP地址)。

可见,使用主机名的方式在同一台WEB服务器上创建多个虚拟主机后,在WEB浏览器中使用主机名访问Web服务器时,Web服务器将选择与该主机名关联的WEB站点进行响应。通过这种方式,多个WEB站点可以共享同一个IP地址和相同的端口号,唯一不足的就是WEB浏览不能通过IP地址去访问这些WEB站点。基于主机名的虚拟主机是目前Internet上的大多数虚拟主机业务提供商所通常采用的方式。只要找出几个小型公司或个人的网站,如果在WEB浏览器地址栏中输入“http://主机名”可以访问到该WEB站点,接着在命令行窗口中执行“ping 主机名”,查看到该域名对应的IP地址,然后在WEB浏览器地址栏中输入“http://IP地址”时,却无法访问这个WEB站点了,那么,这个WEB站点就是一个基于主机名的虚拟主机,它与其他一些WEB站点共享一台WEB服务器,而不是自己独享一台WEB服务器。
注意:当使用安全套接字层 (SSL) 时,不能使用主机头字段来实现虚拟主机,这是因为使用SSL的HTTP请求有加密保护。主机头字段是加密内容的一部分,不能被解释和路由到正确的站点。

posted @ 2009-02-10 13:25 勒紧皮带向前冲 阅读(498) | 评论 (0)编辑 收藏
 


专注移动通信,嵌入式,IC设计,硬件研发,手机研发等当今最热门的技术领域的讨论与资料共享
52RD研发论坛 - http://www.52rd.com/bbs

本文来自:我爱研发网(52RD.com) 详细出处:http://www.52rd.com/bbs/Detail_RD.BBS_131240_17_1_1.html

posted @ 2009-02-07 09:41 勒紧皮带向前冲 阅读(402) | 评论 (0)编辑 收藏
 

什么是ThreadLocal?

顾名思义它是local variable(线程局部变量)。它的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。从线程的角度看,就好像每一个线程都完全拥有该变量。

使用场景

  1. To keep state with a thread (user-id, transaction-id, logging-id)
  2. To cache objects which you need frequently

ThreadLocal类

它 主要由四个方法组成initialValue(),get(),set(T),remove(),其中值得注意的是initialValue(),该方法 是一个protected的方法,显然是为了子类重写而特意实现的。该方法返回当前线程在该线程局部变量的初始值,这个方法是一个延迟调用方法,在一个线 程第1次调用get()或者set(Object)时才执行,并且仅执行1次。ThreadLocal中的确实实现直接返回一个null:

ThreadLocal的原理

ThreadLocal是如何做到为每一个线程维护变量的副本的呢?其实实现的思路很简单,在ThreadLocal类中有一个Map,用于存储每一个线程的变量的副本。比如下面的示例实现:

public class ThreadLocal
{
private Map values = Collections.synchronizedMap(new HashMap());
public Object get()
{
Thread curThread = Thread.currentThread();
Object o = values.get(curThread);
if (o == null && !values.containsKey(curThread))
{
o = initialValue();
values.put(curThread, o);
}
return o;
}

 public void set(Object newValue)
{
values.put(Thread.currentThread(), newValue);
}

 public Object initialValue()
{
return null;
}
}

ThreadLocal 的使用

使用方法一:

Hibernate的文档时看到了关于使ThreadLocal管理多线程访问的部分。具体代码如下

1.  public static final ThreadLocal session = new ThreadLocal();
2.  public static Session currentSession() {
3.      Session s = (Session)session.get();
4.      //open a new session,if this session has none
5.   if(s == null){
6.      s = sessionFactory.openSession();
7.      session.set(s);
8.   }
      return s;
9. }

我们逐行分析
1。 初始化一个ThreadLocal对象,ThreadLocal有三个成员方法 get()、set()、initialvalue()。
    如果不初始化initialvalue,则initialvalue返回null。
3。 session的get根据当前线程返回其对应的线程内部变量,也就是我们需要的net.sf.hibernate.Session(相当于对应每个数据 库连接).多线程情况下共享数据库链接是不安全的。ThreadLocal保证了每个线程都有自己的s(数据库连接)。
5。如果是该线程初次访问,自然,s(数据库连接)会是null,接着创建一个Session,具体就是行6。
6。创建一个数据库连接实例 s
7。保存该数据库连接s到ThreadLocal中。
8。如果当前线程已经访问过数据库了,则从session中get()就可以获取该线程上次获取过的连接实例



以上转自 橄榄树  http://hi.baidu.com/mojiedao/blog/item/0ceeab99e7a0ad086f068c09.html

posted @ 2009-01-12 10:23 勒紧皮带向前冲 阅读(161) | 评论 (0)编辑 收藏
 

java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?
 at org.springframework.web.context.support.WebApplicationContextUtils.getRequiredWebApplicationContext(WebApplicationContextUtils.java:86)
 at org.springframework.web.struts.DelegatingActionUtils.findRequiredWebApplicationContext(DelegatingActionUtils.java:148)
 at org.springframework.web.struts.DelegatingActionProxy.getWebApplicationContext(DelegatingActionProxy.java:146)
 at org.springframework.web.struts.DelegatingActionProxy.getDelegateAction(DelegatingActionProxy.java:125)
 at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:109)
 at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
 at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
 at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
 at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
 at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
 at java.lang.Thread.run(Unknown Source)

该错误表明你在web.xml中没配置spring环境
posted @ 2009-01-04 15:21 勒紧皮带向前冲 阅读(256) | 评论 (0)编辑 收藏
 
1、拷贝pager-taglib.jar包
2、在JSP页面中使用taglib指令引入pager-taglib标签库
3、使用pager-taglib标签库进行分页处理

pg:pager【这个标签用来设置分页的总体参数】重要参数说明:
    url:分页的链接根地址,pager标签会在这个链接的基础上附加分页参数
    items:总记录数,pager标签正是根据这个值来计算分页参数的
    maxPageItems:每页显示的行数,默认为10
    maxIndexPages:在循环输出页码的时候,最大输出多少个页码,默认是10
    
pg:first【第一页的标签】重要参数说明:
    export变量的意义:
    pageUrl - 分页链接URL地址(最重要的export参数)
    pageNumber - 页码
    firstItem - 首页第一行的索引值
    lastItem - 首页最后一行的索引值
    
pg:pre【上一页标签】重要参数说明:
    export变量的意义:
    pageUrl - 分页链接URL地址(最重要的export参数)
    pageNumber - 页码
    firstItem - 前页第一行的索引值
    lastItem - 前页最后一行的索引值

pg:next【下一页标签】重要参数说明:
    export变量的意义:
    pageUrl - 分页链接URL地址(最重要的export参数)
    pageNumber - 页码
    firstItem - 下页第一行的索引值
    lastItem - 下页最后一行的索引值
    
pg:last重要参数说明:
    export变量的意义:
    pageUrl - 分页链接URL地址(最重要的export参数)
    pageNumber - 页码
    firstItem - 尾页第一行的索引值
    lastItem - 尾页最后一行的索引值
    
pg:pages【这个标签用来循环输出页码信息】重要参数说明:
    export变量的意义:
    pageUrl - 分页链接URL地址(最重要的export参数)
    pageNumber - 页码
    firstItem - pageNumber这个页码指定的那一页的第一行的索引值
    lastItem - pageNumber这个页码指定的那一页的最后一行的索引值


pager-taglib-2.0下载
http://www.blogjava.net/Files/wx886104/pager-taglib-2.0.rar
posted @ 2008-12-29 16:45 勒紧皮带向前冲 阅读(351) | 评论 (0)编辑 收藏
 

Log日志:主要用于记录程序运行的情况,以便于程序在部署之后的排错调试等等!也有利于将这些信息进行持久化(如果不将日志信息保存到文件或数据库,则信息便会丢失)

Java Logging API

需JDK1.4版本以上才能支持。

java.util.logging.* 包是JDK的日志记录API。

基本概念

logger  用来记录日志的对象

log level  日志等级:从FINEST到SEVERE级别

请参考JDK文档

handler  日志输出处理器,即用来将格式化后的日志信息输出,J2SE提供了下面的处理器

StreamHandler  将信息输出到一个OutputStream对象

ConsoleHandler  将信息输出到控制台

FileHandler  将信息输出到文件

还有Socket处理器和内存处理器等

Formater  用来对日志信息进行格式化

SimpleFormater  简单的格式化输出

XmlFormater  Xml格式化输出

logManager  日志管理器,它包含有那些被命名的logger,以及从配置文件中读取来的一些控制信息

Log4j

基本概念

Log4j比JDK Logging更加成熟。Log4j是事实上 日志记录标准。

三大概念:logger/appender/layout

logger  使用这个对象来进行输出

appender  使用这个对象来定义输出到哪里去

layout  使用这个对象来定义输出的格式

log4j的级别(level)

DEBUG < INFO < WARN < ERROR < FATAL

基本配置与使用

只需要将log4j.jar包放到类路径中,并且保证在类路径根目录下有一个log4j.properties文件即可。Log4j.properties文件是对log4j的配置。 

在log4j.properties中,可以配置logger/appender/layout/level等内容。

了解如何配置logger

log4j.rootLogger = [级别],[使用哪个appender]

log4j.logger.[logger的名称]=[级别],[使用哪个appender]

了解如何配置appender

Log4j.appender.[appender的名称]=[appender类名]

Log4j.appender.[appender的名称].[appender的属性名]=[appender的属性值]

如:对于ConsoleAppender来说,可以配置它的target属性为System.out,而对于FileAppender来说,可以配置它的File属性为一个文件名

了解如何配置layout

Log4j.appender.[appender的名称].layout=[layout类名]

Log4j.appender.[appender的名称].layout.[layout的属性名]=[layout的属性值]

最常见的是PatternLayout

Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数见表1如下:
%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“"r"n”,Unix平台为“"n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

Commons log

通用Log处理,它是一个接口抽象,底层的实现可以自动替换:

如果当前存在log4j,则使用log4j来实现

否则,使用JDK LOG来实现

否则,使用其自身的简单实现

posted @ 2008-12-29 11:29 勒紧皮带向前冲 阅读(135) | 评论 (0)编辑 收藏
仅列出标题
共14页: First 上一页 3 4 5 6 7 8 9 10 11 下一页 Last