Posted on 2009-02-16 20:54
啥都写点 阅读(2440)
评论(0) 编辑 收藏 所属分类:
J2EE
Log4J 是如何进行工作的?
这是在 Log4J 项目中对 Log4J 的介绍中的一段话
With log4j it is
possible to enable logging at runtime without modifying the application binary.
The log4j package is designed so that these statements can remain in shipped
code without incurring a heavy performance cost. Logging behavior can be
controlled by editing a configuration file, without touching the application
binary.
对于 Log4J 的具体如何进行工作的原理,在 javaeye 上 buaawhl 给出了一个解释:
http://buaawhl.javaeye.com/blog/6450
总结一下就是利用 JDK 提供的 new Throwable().getStackTrace() 方法返回当前运行栈的结构层次,然后对返回的调用栈的信息进行分析,找到调用该类的类的名称。(也就是Log4J自己说的Runtime期间实现Log)
由于在 Log4J 中只存在一个根 Logger ,并且 Logger 之间存在继承的关系,并且我们可以在配置文件( log4J.proerties 或者 XML )中进行配置,可以初始化指定的 Logger ,并且对指定的 Logger 进行一些相关的配置,如设置如何进行输出,以及如何将输出进行布局。并且由于 Logger 之间会存在继承的关系(会找一个最近的 Logger 进行继承,如果没有就以根 Logger 作为父类,共享父类的配置信息),以及父子类之间初始化没有先后的顺序,所以我们可以在配置文件中,对各个程序以及不同的包中使用到 Log4j 的 Log 纪录方式进行配置。
如果在同一个
APPLICATION 对相同名称的 Logger 进行调用,那么只会返回一个 Logger 实例。
Log4J 会不会对系统的性能造成大的影响?
这是对 Log4J 性能的一些描述,看来还是不错的,呵呵,在调整一下 Log 的等级就可以了。
On an AMD Duron
clocked at 800Mhz running JDK 1.3.1, it costs
about 5 nanoseconds to determine if a logging statement should be logged or
not. Actual logging is also quite fast, ranging from 21 microseconds using the
SimpleLayout, 37 microseconds using the TTCCLayout. The performance of the
PatternLayout is almost as good as the dedicated layouts, except that it is
much more flexible.
注:对于 Common
Logging 和 Log4J 的关系可以参见 (其实 JCL
是一个规范,对一些 Log 工具进行了包装,我们常会使用到的具体实现还是 Log4j ,当然也可以使用其他的实现)
http://hedong.3322.org/archives/000316.html
参考资料:
http://www-128.ibm.com/developerworks/cn/java/l-log4j/index.html
使用 Log4J 进行日志操作
http://zooo.51.net/heavyz_cs/notebook/log4j.html
Log4J 学习笔记(推荐)
http://www.dingl.com/view.shtml?xh=485
log4j 配置
http://hedong.3322.org/archives/000193.html
竹笋炒肉的 Log4J 学习笔记
http://forum.springside.org.cn/redirect.php?fid=3&tid=382&goto=nextoldset
SpringSide 对 Log4j 的使用要点
-- 学海无涯