Logback 是一个灵活而高效的日志框架,它是由 Ceki Gülcü 开发的,也是 Log4j 的创建者之一。Logback 旨在成为 Log4j 的替代品,并提供了一系列强大的功能和性能改进。
以下是 Logback 的一些主要特点和功能:
-
模块化结构: Logback 由多个模块组成,包括 logback-core、logback-classic 和 logback-access。其中,logback-core 是核心模块,提供了基本的日志功能;logback-classic 是 Log4j 的替代实现,向下兼容 Log4j API,并提供了更高的性能;logback-access 是一个可选的模块,用于记录 Web 应用程序的访问日志。
-
灵活的配置: Logback 使用 XML 配置文件(logback.xml)进行配置,可以通过配置文件灵活地配置日志输出格式、日志级别、日志文件路径等各种参数,支持动态重新加载配置。
-
多种日志输出: Logback 支持多种日志输出方式,包括输出到控制台、输出到文件、输出到数据库等,可以根据需要配置多个不同的 Appender。
-
异步日志: Logback 支持异步日志记录,可以提高日志记录的性能,避免日志记录操作对应用程序性能的影响。
-
过滤器支持: Logback 提供了丰富的过滤器功能,可以根据日志消息的内容、级别等条件对日志进行过滤和筛选,灵活控制日志的输出。
-
自定义布局: Logback 允许开发者自定义日志的输出格式,可以根据需要定义自己的日志布局模式,满足不同项目的日志格式需求。
-
可扩展性: Logback 提供了丰富的插件和扩展点,可以扩展其功能,满足特定项目的需求,例如自定义 Appender、过滤器等。
总的来说,Logback 是一个功能强大、灵活易用的日志框架,适用于各种规模的 Java 项目,能够帮助开发者实现高效、灵活的日志记录和管理。在 Spring 应用程序中,Logback 通常被用作日志记录的主要框架,并与 Spring Boot 紧密集成,为开发者提供了简单而强大的日志记录解决方案。
1、引用Maven依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.7.9</version>
</dependency>
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.32</version>
</dependency>
2、YAML配置
#日志
logging:#日志级别level:com:test: debug# 设置logback.xml位置config: classpath:logback/logback-spring.xml
3、logback-spring.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false"><!--定义日志文件的存储地址 --><property name="LOG_HOME" value="../../logs" /><!--<property name="COLOR_PATTERN" value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta( %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''})- %gray(%msg%xEx%n)" />--><!-- 控制台输出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}:%L) - %msg%n</pattern></encoder></appender><!-- 按照每天生成日志文件 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!--日志文件输出的文件名 --><FileNamePattern>${LOG_HOME}/webapp-%d{yyyy-MM-dd}.%i.log</FileNamePattern><!--日志文件保留天数 --><MaxHistory>30</MaxHistory><maxFileSize>10MB</maxFileSize></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 --><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern></encoder></appender><!-- 生成 error html格式日志开始 --><appender name="HTML" class="ch.qos.logback.core.FileAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><!--设置日志级别,过滤掉info日志,只输入error日志--><level>ERROR</level></filter><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="ch.qos.logback.classic.html.HTMLLayout"><pattern>%p%d%msg%M%F{32}%L</pattern></layout></encoder><file>${LOG_HOME}/error-log.html</file></appender><!-- 生成 error html格式日志结束 --><!-- 每天生成一个html格式的日志开始 --><appender name="FILE_HTML" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!--日志文件输出的文件名 --><FileNamePattern>${LOG_HOME}/webapp-%d{yyyy-MM-dd}.%i.html</FileNamePattern><!--日志文件保留天数 --><MaxHistory>30</MaxHistory><MaxFileSize>10MB</MaxFileSize></rollingPolicy><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="ch.qos.logback.classic.html.HTMLLayout"><pattern>%p%d%msg%M%F{32}%L</pattern></layout></encoder></appender><!-- 每天生成一个html格式的日志结束 --><!--myibatis log configure --><logger name="com.apache.ibatis" level="TRACE" /><logger name="java.sql.Connection" level="DEBUG" /><logger name="java.sql.Statement" level="DEBUG" /><logger name="java.sql.PreparedStatement" level="DEBUG" /><!-- 日志输出级别 --><root level="INFO"><appender-ref ref="STDOUT" /><appender-ref ref="FILE" /><appender-ref ref="HTML" /><appender-ref ref="FILE_HTML" /></root></configuration>