Logback 简介

Logback 是由 SLF4J 作者开发的新一代日志框架,用于替代 log4j。

主要特点是效率更高,架构设计够通用,适用于不同的环境。

Logback 分为三个模块:logback-core,logback-classic和logback-access。

logback-core 模块是其他两个模块的基础。

logback-classic 模块是 core 的扩展,是log4j的改进版。logback-classic 本身实现了 SLF4J API,因此可以很容易的在 logback 和其他日志框架之间来回切换,例如 log4j、java.util.logging(JUL)。

logback-access 模块集成了 Servlet 容器,提供了 HTTP 访问日志的功能。

官网:

使用 groovy 配置需要添加依赖

 <dependency>             <groupId>org.codehaus.groovy</groupId>             <artifactId>groovy-all</artifactId>             <version>2.4.17</version>         </dependency>
import ch.qos.logback.classic.encoder.PatternLayoutEncoder import ch.qos.logback.classic.filter.ThresholdFilter import ch.qos.logback.core.ConsoleAppender import ch.qos.logback.core.rolling.RollingFileAppender import ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP import ch.qos.logback.core.rolling.TimeBasedRollingPolicy import java.nio.charset.Charset  import static ch.qos.logback.classic.Level.DEBUG import static ch.qos.logback.classic.Level.ERROR import static ch.qos.logback.classic.Level.INFO import static ch.qos.logback.classic.Level.TRACE  scan("60 seconds") def LOG_PATH = "/usr/local/log/" def APP_NAME = "springboot-logback" context.name = "${APP_NAME}" jmxConfigurator() appender("CONSOLE", ConsoleAppender) {   filter(ThresholdFilter) {     level = DEBUG   }   encoder(PatternLayoutEncoder) {     pattern = "%d [%t] %5p %c:%L - %m%n"     charset = Charset.forName("UTF-8")   } } appender("INFO_FILE", RollingFileAppender) {   file = "${LOG_PATH}${APP_NAME}-info.log"   encoder(PatternLayoutEncoder) {     pattern = "%d [%t] %5p %c:%L - %m%n"     charset = Charset.forName("UTF-8")   }   rollingPolicy(TimeBasedRollingPolicy) {     timeBasedFileNamingAndTriggeringPolicy(SizeAndTimeBasedFNATP) {       maxFileSize = "100MB"     }     fileNamePattern = "${LOG_PATH}${APP_NAME}/info/%d{yyyy-MM-dd}-%i.log.gz"     maxHistory = 30   } } appender("ERROR_FILE", RollingFileAppender) {   file = "${LOG_PATH}${APP_NAME}-error.log"   filter(ThresholdFilter) {     level = ERROR   }   encoder(PatternLayoutEncoder) {     pattern = "%d [%t] %5p %c:%L - %m%n"     charset = Charset.forName("UTF-8")   }   rollingPolicy(TimeBasedRollingPolicy) {     timeBasedFileNamingAndTriggeringPolicy(SizeAndTimeBasedFNATP) {       maxFileSize = "256MB"     }     fileNamePattern = "${LOG_PATH}${APP_NAME}/error/%d{yyyy-MM-dd}-%i.log.gz"     maxHistory = 30   } } logger("org.springframework.web", INFO) logger("cn.zwqh.springboot.controller", TRACE) logger("cn.zwqh.springboot.dao", DEBUG) root(INFO, ["CONSOLE", "INFO_FILE", "ERROR_FILE"])

详细的 logback.groovy 语法可以参考 http://logback.qos.ch/manual/groovy.html 。logback 也提供了 logback.xml 转 logback.groovy 的在线工具,地址:http://logback.qos.ch/translator/asGroovy.html (include 标签未作解析,所以转换前把该标签去除,否则会报错)

logback.xml 配置说明

configuration

配置文件的根节点,主要包含以下三个属性:

  • scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
  • scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
  • debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

contextName

设置日志上下文名称,后面输出格式中可以通过定义 %contextName 来打印日志上下文名称。

property

配置文件的变量定义,name 代表变量的名称,value 代表变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${name}”来使用变量。

jmxConfigurator

开启 JMX 的功能,可以从默认配置文件,指定文件或URL重新配置登录,列出记录器并修改记录器级别。

JMX(Java Management Extensions,即 Java 管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX 可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和