还可以给Logger增长一些帮助编程的办法,如Logger.debug(….) , Logger.info(…) , Logger.warn(…) 等等, 如许村平易近们将来就可以轻松地输出各类级其长日记了。
等一下, 老村长还说过“对于所有的ERROR级其长日记,都输出到 errors.log文件中” 类似如许的需求, 似乎给忽视了。
这也好办嘛, 只要在Appender上增长一个属性,就叫做Priority, 如不雅用户要输出的日记是DEBUG级别, 然则有个FileAppender的Priority是 ERROR级别,那这个日记就不消在这个FileAppender中输出了 ,因为ERROR级别比DEBUG级别高嘛。
同理, 在Logger类上也可以增长一个Priority的属性,用户可以去设置, 如不雅一个Logger的Priority是ERROR, 而用户调用了这个Logger的debug办法, 那这个debug 的消息也不会输出。
小张经心全意地投入到设计傍边,一看时光, 都快半夜了, 赶紧歇息, 明天向村长报告请示去。
正交性
第二天, 小张给老村长展示了本身设计的LoggerEvent, Logger , Appender, Formatter, Priority 等类和接口, 老村长捻着胡子知足地点点头:“不错不错,与上一次比拟有巨大年夜的进步。你知不知道我在需求中其实给了你引导?”
“引导? 什么引导? ”
“就是让你朝着正交的偏向去尽力啊”
“正交? ”
‘“如不雅你把Logger, Appender, Formatter算作坐标系中的X轴,Y轴,Z轴, 你看看,这三者是不是可以自力变更而不互相影响啊?”
“我赛,不雅然如斯,我可以随便率性扩大Appender接口而影响不到Logger和Formatter, 无论有若干个Logger 都影响不了Appender和Formatter , 这就是正交了?”
“是啊,当你大年夜体系中提掏出正交的概念的时刻,那就威力无比了,因为变更被封装在了一个维度上,你可以把这些概念随便率性组合,而不会酿裁缝大年夜利面条似的代码。 ”
听到村长做潦攀理论的豪华, 小张高兴得直搓手。
“好吧,你把这个设计实现了吧,对了,你计算叫什么名字? ” 村长问道
“不错,就这么定了吧”
Log4j
小张又花了两个月的时光把Log4j 开辟了出来, 因为Log4j有着优胜的设计,优良的机能, 不仅仅是张家村的人在用, Java帝国的很多村镇、部落都爱上了它。
后来张家村把Log4j 在Apache部落开源了, 这下子吸引了无数的人无偿赞助测试它,扩大它,改进它, 很快就成了帝国最风行的日记对象。
张家村建议帝国把Log4j 纳入到JDK 中, 帝国那效力低下的官僚机构竟然拒绝了。 消息传到了IO大年夜臣的耳朵里,他不由的扼腕太息: 唉,掉去了一次极好的┞沸安机会啊。 如今独一的办法就是赶紧上奏皇上,在官方也供给一套,争夺让臣平易近们应用官方版本。
到了第四代国王(JDK1.4),臣平易近们终于看到了帝国供给的java.util.logging包,也是用来记录日记的,并且个中的核心概念Logger, Formatter, Handler 和 Log4j异常类似,只是为时已晚, Log4j早已深刻人心了, 弗成撼动了。
尾声
沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散!
Log4j 在Apache开源今后, 小张也逐渐地有点落寞,他闲不住又写了一个对象,叫做logback, 有了之前的经验,这logback 比log4j 还要快。
然则IO大年夜臣也有本身的小算盘: 日记嘛, 用我的System.out.println(…..) 不就可以了?! 我还供给了System.err.println不是?
如今的日记世界有了很多的选择 ,除了java.util.logging, log4j 之外,还有logback,tinylog 等其他对象。
其次是日记可以输出到不合的处所,控制台、文件、邮件等等, 这个可以抽象一下,不就是写到不合的目标地吗? 可以叫做LogDestination?
小张想了想, 这么多日记对象,用户如不雅想切换了怎么办?不想用log4j了,能换到logback吗?
我照样供给一个抽象层吧, 用户用这个抽象层的API来写日记, 底层具体用什么日记对象不消关怀,如许就可以移植了。
“我计算把他叫做Log4j , 意思是Log for Java”
小张把这抽象层就叫做Simple Logging Facade for Java,简称SLF4J。
对于Log4j , JDK logging, tinylog 等对象, 须要一个适配层, 把SLF4J 的API转化成具体对象的调用接口。
因为Logback这个对象也是出自小张之手, 直接实现了SLF4J的API,所以连适配层都不须要了, 用起来速度飞快,效力最高,SLFJ4+Logback 成为了很多人的最爱, 大年夜有超出Apache Common Logging + Log4j 之势。
跋文: 本文重要想讲一下日记对象的汗青和近况, 尤其是Log4j核心的设计理念。
文中的小张其实就是Ceki Gülcü,他开辟了Log4j , logback,以及slfj4, 为Java的日记事业做出了卓越的供献。
【编辑推荐】
- 泥瓦匠 5 年 Java 的成长感悟(下)
- Javascript若何监听页面刷新和封闭事宜
- JavaScript 开辟人员须要知道的简写技能
- 推荐Java五大年夜微办事器及其代码示例教程
- Java工程师为何如斯的火爆?
推荐阅读
维度建模已逝世?在答复这个问题之前,让我们回头来看看什么是所谓的维度数据建模。Hadoop 平台的供给商并没有忽视这些 Hadoop 的限制,例如 Hive 就供给了知足 ACID 的事务和可更新的表。根据大年夜量的重要公开问题>>>详细阅读
本文标题:一个著名的日志系统是怎么设计出来的?
地址:http://www.17bianji.com/lsqh/38204.html
1/2 1