作家
登录

一个著名的日志系统是怎么设计出来的?

作者: 来源: 2017-10-25 16:23:47 阅读 我要评论

还可以给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的日记事业做出了卓越的供献。

【编辑推荐】

  1. 泥瓦匠 5 年 Java 的成长感悟(下)
  2. Javascript若何监听页面刷新和封闭事宜
  3. JavaScript 开辟人员须要知道的简写技能
  4. 推荐Java五大年夜微办事器及其代码示例教程
  5. Java工程师为何如斯的火爆?
【义务编辑:未丽燕 TEL:(010)68476606】

  推荐阅读

  大数据和Hadoop时代的维度建模和Kimball数据集市

维度建模已逝世?在答复这个问题之前,让我们回头来看看什么是所谓的维度数据建模。Hadoop 平台的供给商并没有忽视这些 Hadoop 的限制,例如 Hive 就供给了知足 ACID 的事务和可更新的表。根据大年夜量的重要公开问题>>>详细阅读


本文标题:一个著名的日志系统是怎么设计出来的?

地址:http://www.17bianji.com/lsqh/38204.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)