一、日志输出格式说明
-
yml配置输出级别及输出格式(没有xml配置时可以自行配置pattern规则):
logging: level: com.it.*: debug pattern: console: "%d{yyyy-MM-dd HH:mm:ss} %clr(%-5level) [%magenta(${spring.application.name})] --- %cyan(%-30.30logger{0}) : %m%n" -
pattern语法说明:
%d{yyyy-MM-dd HH:mm:ss}:日志输出时间的格式;%clr():日志输出字体颜色,日志级别不同,颜色也不同;%cyan():日志输出字体颜色为青色;%magenta():日志输出字体颜色为紫色(品红色);%t或%thread:线程名称;%-5level:%-5指占用五个字符,左对齐。level指的是日志输出级别,分为TRACE<DEBUG<INFO<WARN<ERROR<FATAL;%-30.30:总字符30个长度,超出截取,不够则空格补齐。点号前面加减号-,表示从前面截断。点号后面加减号-,表示从尾部截断;logger{0}:执行的方法全类名,可以有一个整形参数,用于缩短日志记录器的包名。设置为0表示只输入logger最右边点符号之后的字符串;%m或%msg:日志输出的信息;%n:末尾换行;
二、Log4j2的使用
-
引入依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> -
排除默认的日志依赖 LogBack,主要是
spring-boot-starter-logging:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> -
配置文件yaml修改:
logging: config: classpath:log4j2.xml -
添加XML配置文件
log4j2.xml:<?xml version="1.0" encoding="UTF-8"?> <configuration status="error" monitorInterval="10"> <properties> <property name="LOG_HOME">./logs</property> <property name="PATTERN_LAYOUT_CONSOLE">%d{yyyy-MM-dd HH:mm:ss.SSS} %5p: --- [%15.15t] %-40.40logger{39} : %m%n</property> <property name="PATTERN_LAYOUT_CONSOLE_ROOT">%d{yyyy-MM-dd HH:mm:ss.SSS} %5p --- [%15.15t] %-40.40logger{39} : %m%n</property> <property name="PATTERN_LAYOUT">%d{yyyy-MM-dd HH:mm:ss.SSS} %5p --- [%15.15t] %-40.40logger{39} : %m%n</property> <property name="SYSTEM_LEVEL">info</property> </properties> <appenders> <Console name="Console" target="SYSTEM_OUT"> <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout charset="utf-8"> <MarkerPatternSelector defaultPattern="${PATTERN_LAYOUT_CONSOLE_ROOT}"> <PatternMatch key="UTIL" pattern="${PATTERN_LAYOUT_CONSOLE}"/> </MarkerPatternSelector> </PatternLayout> </Console> <RollingFile name="RollingFileSystem" fileName="${LOG_HOME}/system.log" filePattern="${LOG_HOME}/$${date:yyyy-MM}/$${date:yyyy-MM-dd}/system/system-%d{yyyy-MM-dd}-%i.log.gz" bufferSize="4096" immediateFlush="true" bufferedIO="true" append="true"> <Filters> <MarkerFilter marker="MESSAGE" onMatch="DENY" onMismatch="NEUTRAL"/> <MarkerFilter marker="TRACE" onMatch="DENY" onMismatch="NEUTRAL"/> <ThresholdFilter level="${SYSTEM_LEVEL}" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> <PatternLayout charset="utf-8"> <MarkerPatternSelector defaultPattern="${PATTERN_LAYOUT_CONSOLE_ROOT}"> <PatternMatch key="UTIL" pattern="${PATTERN_LAYOUT}"/> </MarkerPatternSelector> </PatternLayout> <Policies> <CronTriggeringPolicy schedule="0 0 0 * * ?"/> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="100MB"/> </Policies> <DefaultRolloverStrategy max="50"> <Delete basePath="${LOG_HOME}" testMode="false" maxDepth="5"> <IfFileName glob="*/*/system/system*.log.gz"> <IfLastModified age="30d"> <IfAny> <IfAccumulatedFileSize exceeds="5GB"/> <IfAccumulatedFileCount exceeds="1000"/> </IfAny> </IfLastModified> </IfFileName> </Delete> </DefaultRolloverStrategy> </RollingFile> </appenders> <loggers> <root level="${SYSTEM_LEVEL}"> <appender-ref ref="Console"/> <appender-ref ref="RollingFileSystem"/> </root> <Logger name="com" level="${SYSTEM_LEVEL}" additivity="false"> <appender-ref ref="RollingFileSystem"/> </Logger> <Logger name="com.it.mapper" level="DEBUG" additivity="false"> <appender-ref ref="RollingFileSystem"/> </Logger> </loggers> </configuration>
三、XML配置标签说明:
- configuration:父标签,包裹所有元素;
- status:配置文件的日志检查级别,符合的时候会触发日志输出;
- monitorInterval:间隔时间,每隔一段时间检查一次配置文件是否更改;
- properties:用于声明变量,一般为声明日志存储位置,日志输出格式、日志级别等。
- appenders:声明日志输出方式、日志位置等;
- Console:控制台输出,
target属性为设置输出方式,SYSTEM_OUT或SYSTEM_ERR,一般设置默认SYSTEM_OUT;- PatternLayout:日志输出格式,引用自定义的properties变量即可;
- RollingFile:文件滚动记录日志,可以配置限制日志文件大小和保存策略;
- Filters:声明一组顺序执行的过滤器,依次执行,
ACCEPT表示允许写入,DENY表示拒绝写入,NEUTRAL表示中立,即放行到下一个过滤器; - MarkerFilter:声明一个标记过滤器,根据日志的标记信息判断日志的写入;
- ThresholdFilter:声明一个阈值过滤器,根据日志级别进行判读写入;
- Policies:指定新建日志文件的时机,日志打包策略,如定时打包、存储大小等;
- DefaultRolloverStrategy:声明日志文件的删除策略;
- Filters:声明一组顺序执行的过滤器,依次执行,
- Console:控制台输出,
- loggers:声明日志使用哪些appender进行输出;
- root:设置项目根目录的日志输出方式,具体使用哪个
appender; - logger:设置具体的包的日志,可以控制某些依赖的日志;
- root:设置项目根目录的日志输出方式,具体使用哪个