Logback一个通用、快速而又灵活的Java日志框架。主要分为三个模块组成
通常情况下,并不需要在pom.xml文件中显式添加logback的Maven依赖。因为SpringBoot默认使用Spring Boot Starter依赖项来管理日志记录,里面包含了logback的依赖,并且也做了相关的默认日志设置。
如果想自定义配置,可以在src/main/resources
目录下添加logback-spring.xml
(官方推荐的名字,而不是logback.xml
)的配置文件,SpringBoot会自动加载,如果想使用其他名称可以在配置处指定
logging.config=classpath:logback.xml
property
>声明变量,方便后面引用<property name="log.path" value="logs/gateway"/>
这样就声明了一个log.path
的变量,想要使用则${log.path}
自定义和配置日志输出目标在Logback 中使用
来指定日志输出位置和格式等等,可以将日志输出到不同的目标,如控制台,文件,数据库等。
name
用来指定appender
的名称,在配置文件中是唯一标识
class
:用来指定实现类,Logback提供了多种自带的实现类,如:
ConsoleAppender
控制台输出FileAppender
或者RollingFileAppender
文件输出DBAppender
数据库其他配置项
根据实现不同的类,可以设置有些相关的配置项,如文件路径,输出格式,滚动策略等。
日志编码器标签<encoder>
<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%npattern>
encoder>
encoder
标签是Logback 配置文件中用于定义和配置日志事件的编码器的标签
pattern
是encoder
重要的配置项,用来指定日志输出格式,包括日期时间、日志级别、线程信息、日志内容等等。常用的占位符有:
占位符 | 说明 |
---|---|
%d | 日期时间 |
%level | 日志级别,如 DEBUG、INFO、WARN、ERROR 等 |
%logger | 日志记录器的名称 |
%thread | 线程名称 |
%msg | 日志消息内容 |
%n | 换行符 |
%class | 出日志所在类的名称 |
%file | 日志所在文件名 |
%line | 所在日志行号 |
其他 |
指定日志级别<logger name="com.learn" level="debug"/>
可以为不同的包或者类设置不同的日志级别
指定日志级别<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERRORlevel>
filter>
标签用于定义过滤器,它可以用于对特定的日志事件进行筛选和处理。过滤器可根据指定的条件决定是否传递或忽略某个日志事件。
logback 提供了多种类型的过滤器,每种类型都有相应的配置属性。以下是一些常见的过滤器类型及其作用:
ThresholdFilter(阈值过滤器):根据日志事件的级别进行过滤,只传递满足指定级别要求的事件。
LevelFilter(级别过滤器):允许或拒绝特定的日志级别。可以设置最小和最大级别,只保留在范围内的日志事件。
TimeFilter(时间过滤器):根据日志事件的时间戳进行过滤,只传递在指定时间范围内的事件。
MarkerFilter(标记过滤器):根据事件的标记(Marker)进行过滤,只传递符合指定标记要求的事件。
<filter class="ch.qos.logback.classic.filter.MarkerFilter">
<marker>MY_MARKERmarker>
<onMatch>ACCEPTonMatch>
<onMismatch>DENYonMismatch>
filter>
// 获取日志记录器
private static final Logger logger = LoggerFactory.getLogger(MyApp.class);
// 创建自定义标记
private static final Marker MY_MARKER = MarkerFactory.getMarker("MY_MARKER");
public static void main(String[] args) {
// 输出具有自定义标记的日志事件
logger.info(MY_MARKER, "This log event has the MY_MARKER marker");
}
全局日志配置 <root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="debug"/>
root>
标签用来定义跟日志记录器的配置。这里指定了INFO
的级别是指日志记录的级别,在日志级别中它与
相比,
的优先级更高。
并且可以为根日志记录器定义多个输出目标(appender),以将日志事件发送到不同的地方,如控制台、文件、数据库等。
不同环境配置<springProfile name="dev">
<logger name="com.learn" level="debug"/>
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="debug"/>
<appender-ref ref="error"/>
root>
springProfile>
标签是 Logback 提供的特殊标签
在SpringBoot中每个环境有不同的配置参数,logback日志管理也支持多环境参数配置,与Spring Profile 关联起来,根据当前的环境决定是否加载特定的日志输出配置。
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
这里只是设置了彩色打印日志的依赖,但并还没有设置,需要在日志打印格式里配置
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}pattern>
encoder>
appender>
<appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/debug.logfile>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/%d{yyyyMMdd}/debug.%i.logfileNamePattern>
<maxFileSize>20MBmaxFileSize>
<maxHistory>15maxHistory>
rollingPolicy>
<encoder>
<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%npattern>
encoder>
appender>
<configuration debug="false" scan="false">
<property name="log.path" value="logs/gateway"/>
<property name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}pattern>
encoder>
appender>
<appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/debug.logfile>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/%d{yyyyMMdd}/debug.%i.logfileNamePattern>
<maxFileSize>20MBmaxFileSize>
<maxHistory>15maxHistory>
rollingPolicy>
<encoder>
<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%npattern>
encoder>
appender>
<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.logfile>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gzfileNamePattern>
<maxFileSize>50MBmaxFileSize>
<maxHistory>30maxHistory>
rollingPolicy>
<encoder>
<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%npattern>
encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERRORlevel>
filter>
appender>
<springProfile name="dev">
<logger name="com.learn" level="debug"/>
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="debug"/>
<appender-ref ref="error"/>
root>
springProfile>
configuration>