不管从设计上仍是完成上,Logback绝对log4j而言有了绝对多的改良。不外虽然难以逐个细数,这里仍是罗列部分来由为何选择logback而不是log4j。服膺logback与log4j在观点上面是很类似的,它们都是有统一群开辟者树立。所以假如你曾经对log4j很熟习,你也能够很快上手logback。假如你爱好运用log4j,你或许会迷上运用logback。
基于我们先前在log4j上的任务,logback 重写了外部的完成,在某些特定的场景上面,乃至可以比之前的速度快上10倍。在包管logback的组件愈加疾速的同时,同时所需的内存愈加少。
Logback 历经了几年,数不清小时数的测试。虽然log4j也是测试过的,可是Logback的测试愈加充沛,跟log4j不在统一个级别。我们以为,这恰是人们选择Logback而不是log4j的最主要的缘由。人们都盼望即便在卑劣的前提下,你的日志框架仍然波动而牢靠。
SLF4J API 完成的代码。这可以大大减少改换日志系统的任务量。
Logback附带具体的和不时更新的文档。
设置装备摆设logback的传统办法是经过XML文件。在文档中,大部分例子都是是用XML语法。可是,关于logback版本0.9.22,经过Groovy编写的设置装备摆设文件也失掉支撑。比拟于XML,Groovy作风的设置装备摆设文件愈加直观,连接和简洁的语法。
如今, 曾经有一个Tools主动把logback.xml文件迁徙至logback.groovy。
Logback-classic可以在设置装备摆设文件被修正后,主动从头载入。这个扫描进程很快,无资本争用,而且可以静态扩大支撑在上百个线程之间每秒上百万个挪用。它和使用Server联合杰出,而且在JEE情况通用,由于它不会挪用创立一个独自的线程来做扫描。
FileAppender和它的子类,包含RollingFileAppender,可以优雅的从I/O过错中恢复。所以,假如一个文件Server暂时宕机,你不再需求重启你的使用,而日记功用就可以正常任务。当文件Server恢停工作,logback相干的appender就会通明地和疾速的从上一个过错中恢复。
经过设置TimeBasedRollingPolicy 或许 SizeAndTimeBasedFNATP的 maxHistory 属性,你就能够把持日记归档文件的最大数目。假如你的回滚战略是每个月回滚的,而且你盼望保管一年的日记,那末只需容易的设置maxHistory属性为12。关于12个月之前的归档日记文件将被主动肃清。
RollingFileAppender可以在回滚操纵中,主动紧缩归档日记文件。紧缩凡是是异步履行的,所以即便是很大的日记文件,你的使用都不会因而而被梗阻。
在慎重形式中,在多个JVM中运转的多个FileAppender实例,可以平安的写入一致个日记文件。慎重形式可以在必定的限制前提下使用于RollingFileAppender。
开辟者凡是需求在分歧的目的情况中变换logback的设置装备摆设文件,例如开辟情况,测试情况和生产情况。这些设置装备摆设文件大要是一样的,除某部分会有分歧。为了不反复,logback支撑设置装备摆设文件中的前提处置,只需运用<if>,<then>和<else>,那末统一个设置装备摆设文件就能够在分歧的情况中运用了。
Logback具有远比log4j更丰厚的过滤才能。例如,让我们假定,有一个相当主要的贸易使用安排在生产情况。思索到大量的买卖数据需求处置,记载级别被设置为WARN,那末只要正告和过错信息才会被记载。如今,想象一下,你在开辟情况碰到了一个臭虫,可是在测试平台中却很难发明,由于一些情况之间(生产情况/测试情况)的未知差别。
运用log4j,你只能选择在生产系统中下降记载的级别到DEBUG,来测验考试发明问题。可是很不幸,这会生成大量的日记记载,让剖析变得艰苦。更主要的是,过剩的日记记载会影响到生产情况的功能。
运用logback,你可以选择保存只一切用户的WARN级此外日记,而除某个用户,例如Alice,而她就是问题的相干用户。当Alice登录系统,她就会以DEBUG级别被记载,而其他用户依然是以WARN级别来记载日记。这个功用,可以经过在设置装备摆设文件的XML中添加4行。请在相干章节中查找MDCFilter
SiftingAppender是一个万能的追加器。它可以基于任何给定的及时属性离开(或许挑选)日记。例如,SiftingAppender可以基于用户会话离开日记事情,如许,可认为每个用户树立一个自力的日记文件。
当logback打印一个异常,仓库轨迹信息将包括包的相干数据。下面是一个经过 logback-demo 生成的仓库信息:
14:28:48.835 [btpool0-7] INFO c.q.l.demo.prime.PrimeAction - 99 is not a valid value java.lang.Exception: 99 is invalid at ch.qos.logback.demo.prime.PrimeAction.execute(PrimeAction.java:28) [classes/:na] at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) [struts-1.2.9.jar:1.2.9] at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) [struts-1.2.9.jar:1.2.9] at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) [struts-1.2.9.jar:1.2.9] at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) [servlet-api-2.5-6.1.12.jar:6.1.12] at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502) [jetty-6.1.12.jar:6.1.12] at ch.qos.logback.demo.UserServletFilter.doFilter(UserServletFilter.java:44) [classes/:na] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) [jetty-6.1.12.jar:6.1.12] at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:361) [jetty-6.1.12.jar:6.1.12] at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417) [jetty-6.1.12.jar:6.1.12] at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) [jetty-6.1.12.jar:6.1.12]
从上面的信息,你可以发明这个使用运用Struts 1.2.9 并且是运用 jetty 6.1.12安排的。所以,仓库轨迹信息将疾速的通知读者,关于异常发作的类另有包和包的版本。当你的客户发送一个仓库轨迹信息给你,作为一个开辟职员,你就不需求让他们通知你他们正在运用的包的版本。这项信息曾经包含在仓库轨迹信息中。具体请参考 "%xThrowable" conversion word.
这项功用可以十分有协助的阐明,有点用户误认为这是IDE的功用。
最初但绝非最不主要的是,作为logback宣布包的一部分,logback-access模块可与Jetty或许Tomcat实行集成,供给了十分丰厚而弱小的经过HTTP拜访日记的功用。由于logback-access模块是logback早期设计计划中的一部分,因而,一切你所爱好的logback-classic模块所供给的全体特征logback-access异样也具有。
我们给出了很多选择logback而不选择log4j的来由。简而言之,既然logback构建于我们先前所构建的log4j之上,logback可以说就是一个更好的log4j。
本文中的一切译文仅用于进修和交换目标,转载请务必注明文章译者、出处、和本文链接。 2KB翻译任务按照 CC 协定,假如我们的任务有进犯到您的权益,请实时联络我们。2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务