“后浪”日志框架logback的使用和配置文件详解

原文链接:
https://www.cnblogs.com/warking/p/5710303.html
作者:行走在云端的愚公
说明:用过了不少日志框架或包,但最近发现还是slf4j和logback是黄金组合 。昨天写了篇快速上手的贴文,本来想再写一篇关于logback日志框架的文章,就查看到了这篇,写得比较不错,就转载于此,并修改了部分错别字等(如果英文好,可以去官网:http://logback.qos.ch/一探究竟) 。
可以结合我昨天发布的如何快速实现SL4J和logback日志框架的Web项目整合配置?深入的来理解logback日志框架 。
“后浪”日志框架logback的使用和配置文件详解

文章插图
 
转发内容如下:
一、logback的介绍
Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch 。它当前分为下面下个模块:
  • logback-core:其它两个模块的基础模块
  • logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging
  • logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能
二、logback取代log4j的理由:
  1. 更快的实现:Logback的内核重写了,在一些关键执行路径上性能提升10倍以上 。而且logback不仅性能提升了,初始化内存加载也更小了 。
  2. 非常充分的测试:Logback经过了几年,数不清小时的测试 。Logback的测试完全不同级别的 。
  3. Logback-classic非常自然实现了SLF4j:Logback-classic实现了SLF4j 。在使用SLF4j中,你都感觉不到logback-classic 。而且因为logback-classic非常自然地实现了slf4j ,所 以切换到log4j或者其它,非常容易,只需要提供成另一个jar包就OK,根本不需要去动那些通过SLF4JAPI实现的代码 。
  4. 非常充分的文档 官方网站有两百多页的文档 。
  5. 自动重新加载配置文件,当配置文件修改了,Logback-classic能自动重新加载配置文件 。扫描过程快且安全,它并不需要另外创建一个扫描线程 。这个技术充分保证了应用程序能跑得很欢在JEE环境里面 。
  6. Lilith是log事件的观察者,和log4j的chainsaw类似 。而lilith还能处理大数量的log数据。
  7. 谨慎的模式和非常友好的恢复,在谨慎模式下,多个FileAppender实例跑在多个JVM下,能 够安全地写道同一个日志文件 。RollingFileAppender会有些限制 。Logback的FileAppender和它的子类包括 RollingFileAppender能够非常友好地从I/O异常中恢复 。
  8. 配置文件可以处理不同的情况,开发人员经常需要判断不同的Logback配置文件在不同的环境下(开发,测试,生产) 。而这些配置文件仅仅只有一些很小的不同,可以通过,和来实现,这样一个配置文件就可以适应多个环境 。
  9. Filters(过滤器)有些时候,需要诊断一个问题,需要打出日志 。在log4j,只有降低日志级别,不过这样会打出大量的日志,会影响应用性能 。在Logback,你可以继续 保持那个日志级别而除掉某种特殊情况,如alice这个用户登录,她的日志将打在DEBUG级别而其他用户可以继续打在WARN级别 。要实现这个功能只需加4行XML配置 。可以参考MDCFIlter。
  10. SiftingAppender(一个非常多功能的Appender):它可以用来分割日志文件根据任何一个给定的运行参数 。如,SiftingAppender能够区别日志事件跟进用户的Session,然后每个用户会有一个日志文件 。
  11. 自动压缩已经打出来的log:RollingFileAppender在产生新文件的时候,会自动压缩已经打出来的日志文件 。压缩是个异步过程,所以甚至对于大的日志文件,在压缩过程中应用不会受任何影响 。
  12. 堆栈树带有包版本:Logback在打出堆栈树日志时,会带上包的数据 。
  13. 自动去除旧的日志文件:通过设置TimeBasedRollingPolicy或者SizeAndTimeBasedFNATP的maxHistory属性,你可以控制已经产生日志文件的最大数量 。如果设置maxHistory 12,那那些log文件超过12个月的都会被自动移除 。
三、logback的配置介绍
  • Logger、appender及layout
Logger作为日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型、级别 。Appender主要用于指定日志输出的目的地,目的地可以是控制台、文件、远程套接字服务器、 MySQL、PostreSQL、 Oracle和其他数据库、 JMS和远程UNIX Syslog守护进程等 。Layout 负责把事件转换成字符串,格式化的日志信息的输出 。
  • logger context
各个logger 都被关联到一个 LoggerContext,LoggerContext负责制造logger,也负责以树结构排列各logger 。其他所有logger也通过org.slf4j.LoggerFactory 类的静态方法getLogger取得 。getLogger方法以 logger名称为参数 。用同一名字调用LoggerFactory.getLogger 方法所得到的永远都是同一个logger对象的引用 。


推荐阅读