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 访问日志的功能.
官网: http://logback.qos.ch/
中文网: http://www.logback.cn/
GitHub: https://github.com/qos-ch/logback
Logback 使用
1. 使用 logback-spring.xml 配置
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- 日志级别从低到高分为 TRACE <DEBUG < INFO < WARN < ERROR < FATAL, 如果设置为 WARN, 则低于 WARN 的信息都不会输出 -->
- <!-- scan: 当此属性设置为 true 时, 配置文件如果发生改变, 将会被重新加载, 默认值为 true. -->
- <!-- scanPeriod: 设置监测配置文件是否有修改的时间间隔, 如果没有给出时间单位, 默认单位是毫秒. 当 scan 为 true 时, 此属性生效. 默认的时间间隔为 1 分钟. -->
- <!-- debug: 当此属性设置为 true 时, 将打印出 logback 内部日志信息, 实时查看 logback 运行状态. 默认值为 false. -->
- <configuration scan="true" scanPeriod="60 seconds" debug="false">
- <!-- 定义日志根目录 -->
- <property name="LOG_PATH" value="/usr/local/log/" />
- <!-- 定义应用名称 -->
- <property name="APP_NAME" value="springboot-logback" />
- <!-- 应用名称 -->
- <contextName>${APP_NAME}</contextName>
- <!-- 引用 Spring Boot 中默认的 logback 配置 -->
- <!-- <include resource="org/springframework/boot/logging/logback/base.xml" /> -->
- <!-- 可以动态修改日志输出等级 -->
- <jmxConfigurator />
- <!-- 输出到控制台 -->
- <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
- <!-- 此日志 appender 是为开发使用, 只配置最底级别, 控制台输出的日志级别是大于或等于此级别的日志信息 -->
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>debug</level>
- </filter>
- <encoder>
- <pattern>%d [%t] %5p %c:%L - %m%n</pattern>
- <!-- 设置字符集 -->
- <charset>UTF-8</charset>
- </encoder>
- </appender>
- <!-- 时间滚动输出 level 为 INFO 日志 -->
- <appender name="INFO_FILE"
- class="ch.qos.logback.core.rolling.RollingFileAppender">
- <File>${LOG_PATH}${APP_NAME}-info.log</File>
- <encoder>
- <pattern>%d [%t] %5p %c:%L - %m%n</pattern>
- </encoder>
- <!-- 日志记录器的滚动策略, 按日期, 按大小记录, 日志按天分类压缩保存 -->
- <rollingPolicy
- class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <timeBasedFileNamingAndTriggeringPolicy
- class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
- <maxFileSize>100MB</maxFileSize>
- </timeBasedFileNamingAndTriggeringPolicy>
- <FileNamePattern>${LOG_PATH}${APP_NAME}/info/%d{yyyy-MM-dd}-%i.log.gz
- </FileNamePattern>
- <!-- 日志文件保留天数 -->
- <MaxHistory>30</MaxHistory>
- </rollingPolicy>
- </appender>
- <!-- 时间滚动输出 level 为 ERROR 日志 -->
- <appender name="ERROR_FILE"
- class="ch.qos.logback.core.rolling.RollingFileAppender">
- <File>${LOG_PATH}${APP_NAME}-error.log</File>
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>error</level>
- </filter>
- <encoder>
- <pattern>%d [%t] %5p %c:%L - %m%n</pattern>
- </encoder>
- <!-- 日志记录器的滚动策略, 按日期, 按大小记录, 日志按天分类压缩保存 -->
- <rollingPolicy
- class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <timeBasedFileNamingAndTriggeringPolicy
- class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
- <maxFileSize>256MB</maxFileSize>
- </timeBasedFileNamingAndTriggeringPolicy>
- <FileNamePattern>${LOG_PATH}${APP_NAME}/error/%d{yyyy-MM-dd}-%i.log.gz
- </FileNamePattern>
- <!-- 日志文件保留天数 -->
- <MaxHistory>30</MaxHistory>
- </rollingPolicy>
- </appender>
- <!-- 设置需要打印日志的包及输出级别 -->
- <logger name="org.springframework.web" level="INFO" />
- <logger name="cn.zwqh.springboot.controller" level="TRACE" />
- <!--
- 使用 mybatis 的时候, sql 语句只有在 debug 级别下才会打印
- -->
- <logger name="cn.zwqh.springboot.dao" level="debug" />
- <!--
- root 节点是必选节点, 用来指定最基础的日志输出级别, 只有一个 level 属性
- level: 用来设置打印级别, 大小写无关: TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
- 不能设置为 INHERITED 或者同义词 NULL. 默认是 DEBUG
- 可以包含零个或多个元素, 标识这个 appender 将会添加到这个 logger.
- -->
- <root level="info">
- <appender-ref ref="CONSOLE" />
- <appender-ref ref="INFO_FILE" />
- <appender-ref ref="ERROR_FILE" />
- </root>
- </configuration>
2. 使用 logback.groovy 配置
使用 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 可以跨越一系列异构操作系统平台, 系统体系结构和网络传输协议, 灵活的开发无缝集成的系统, 网络和服务管理应用. 相关文档: http://logback.qos.ch/manual/jmxConfig.html
appender
日志输出组件, 主要负责日志的输出以及格式化日志. 常用的属性有 name 和 class.
name:appender 组件的名称, 后面给 logger 指定 appender 使用.
class:appender 的具体实现类. 常用的有 ConsoleAppender,FileAppender,RollingFileAppender.
appender 的具体实现类:
ConsoleAppender: 向控制台输出日志内容的组件, 只要定义好 encoder 节点就可以使用.
FileAppender: 向文件输出日志内容的组件, 用法也很简单, 不过由于没有日志滚动策略, 一般很少使用.
RollingFileAppender: 向文件输出日志内容的组件, 同时可以配置日志文件滚动策略, 在日志达到一定条件后生成一个新的日志文件.
Threshold filter
Logback 定义的日志打印级别的过滤器. 可以过滤掉指定级别以下的日志不输出到文件.
encoder charset
表示对日志进行编码.
encoder pattern
%d{HH:mm:ss.SSS} -- 日志输出时间.
%thread -- 输出日志的进程名称, 用方括号括起来. 这个信息在 Web 应用以及异步任务处理中很有用.
%-5level -- 日志级别, 使用 5 个字符靠左对齐.
%logger{36} -- 日志输出者的名字.
%msg -- 日志消息.
%n -- 换行符.
rollingPolicy
日志记录器的滚动策略.
FileNamePattern: 定义日志的切分方式, 本文把每一天的日志归档到一个文件.
MaxHistory: 表示日志保留的天数, 本文设置为 30 天.
logger
用来设置某一个包或者具体的某一个类的日志打印级别, 以及指定.
name: 用来指定受此 logger 约束的某一个包或者具体的某一个类.
level: 用来设置打印级别, 大小写无关: TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 还有一个特殊值 INHERITED 或者同义词 NULL, 代表强制执行上级的级别. 如果未设置此属性, 那么当前 logger 将会继承上级的级别.
使用 mybatis 的时候, sql 语句只有在 debug 级别下才会打印
root
必选节点, 用来指定最基础的日志输出级别, 只有一个 level 属性
level: 用来设置打印级别, 大小写无关: TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 不能设置为 INHERITED 或者同义词 NULL. 默认是 DEBUG 可以包含零个或多个元素, 标识这个 appender 将会添加到这个 logger.
示例代码
码云
来源: https://www.cnblogs.com/zwqh/p/11792776.html