Chinaunix首页 | 论坛 | 博客
  • 博客访问: 20619
  • 博文数量: 7
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 67
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-30 19:06
个人简介

时不时的会发两篇博文

文章分类

全部博文(7)

文章存档

2014年(5)

2013年(2)

我的朋友

分类: Java

2014-02-08 17:15:28

log4j之自定义属

    通过
http://blog.chinaunix.net/uid-28953367-id-4098272.html 这篇文章可以了解到,log4j配置文件中,可供使用者自行定义的仅有appender(创建appender),如果想自定义appender(或layout等其他)属性,应该如何做?其实log4j提供了良好的框架来供开发者扩展自己的功能。
    以org.apache.log4j.net.SocketAppender为例,定义一个SocketAppender,如下
  1. #socket
  2. log4j.appender.socket=org.apache.log4j.net.SocketAppender
  3. log4j.appender.socket.RemoteHost=10.10.40.25
  4. log4j.appender.socket.Port=8888
  5. #重发间隔ms
  6. log4j.appender.socket.reconnectionDelay=1000
    查看log4j源码,可以看到,org.apache.log4j.net.SocketAppender拥有众多属性,诸如RemoteHost  Port  reconnectionDelay  address  locationInfo等,通过跟踪log4j源码可以了解到,log4j在加载配置文件时,会使用反射机制,通过org.apache.log4j.config.PropertySetter类中的setProperty方法,并调用SocketAppender类中各属性的set方法,将配置文件中各属性值设置到SocketAppender实例中(各属性值会根据实际属性类型进行转换)。
   了解到log4j加载配置文件的过程之后,为log4j添加自定义属性的思路便就明了了。
   如,想在SocketAppender中增加一个projName属性,以标识该工程的工程名,步骤如下

   一、修改配置文件,为SocketAppender增加projName属性

  1. #socket
  2. log4j.appender.socket=org.apache.log4j.net.SocketAppender
  3. log4j.appender.socket.RemoteHost=10.10.40.25
  4. log4j.appender.socket.Port=8888
  5. #重发间隔ms
  6. log4j.appender.socket.reconnectionDelay=1000
  7. #本地信息
  8. log4j.appender.socket.LocationInfo=true
  9. #自定义属性--工程名
  10. log4j.appender.socket.projName=myProjName
    
此时运行代码,会报出 log4j:WARN No such property [projName] in org.apache.log4j.net.SocketAppender. 的错误,这是因为源码中SocketAppender类并没有projName属性。

    二、
修改org.apache.log4j.net.SocketAppender源码
   在org.apache.log4j.net.SocketAppender源码中,添加
 String projName; 
属性,并为其添加 set/get 方法,再次运行程序,便会发现再无上述错误出现,调试程序可以发现,log4j会自动调用SocketAppender中setProjName方法设置SocketAppender实例中的projName值。

   
为其他appender或者layout添加自定义属性的步骤类似,接下来,便可以编写自己的代码,在实际代码中使用这些自定义的属性了。
   
阅读(949) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~