0、前言
日志記錄對系統來說必不可少,spring boot中常用的日志組件有log4j、logback、log4j2,其中logback是spring boot默認的,已自帶;選用log4j2就可以,其他的不必去關注;
一、集成log4j2日志組件
1、pom依賴中去除默認的logback日志框架:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 7-1 去掉自帶的日志依賴--> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency>
2、添加依賴
<!-- 7-2、集成log4j2 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <!-- 額外添加disruptor依賴,用於解決log4j2日志版本較低報錯問題--> <dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>3.4.2</version> </dependency>
3、增加日志配置文件log4j2-dev.xml
<?xml version="1.0" encoding="UTF-8"?> <!--設置log4j2的自身log級別為warn--> <!--日志級別以及優先級排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --> <!--Configuration后面的status,這個用於設置log4j2自身內部的信息輸出,可以不設置, 當設置成trace時,你會看到log4j2內部各種詳細輸出--> <!--monitorInterval:Log4j能夠自動檢測修改配置 文件和重新配置本身,設置間隔秒數--> <Configuration status="INFO" monitorInterval="30"> <Properties> <!-- 輸出路徑 --> <Property name="logpath">/Log4j/logs/log/dev</Property> </Properties> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="[%d][%-5p][%t] %m (%F:%L)%n"/> </Console> <RollingFile name="debug" fileName="${logpath}/debug/erp_debug.log" filePattern="${logpath}/debug/erp_debug_%d{yyyy-MM-dd}-%i.log"> <Filters> <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/> <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> <PatternLayout pattern="[%d][%-5p][%t] %m (%F:%L)%n"/> <Policies> <TimeBasedTriggeringPolicy interval="24" modulate="true"/> <SizeBasedTriggeringPolicy size="50 MB"/>\ </Policies> <DefaultRolloverStrategy max="30"> <Delete basePath="${logpath}/debug" maxDepth="1"> <IfFileName glob="erp_debug_*.log"/> <IfLastModified age="15d"/> </Delete> </DefaultRolloverStrategy> </RollingFile> <RollingFile name="info" fileName="${logpath}/info/erp_info.log" filePattern="${logpath}/info/erp_info_%d{yyyy-MM-dd}-%i.log"> <Filters> <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> <PatternLayout pattern="[%d][%-5p][%t] %m (%F:%L)%n"/> <Policies> <TimeBasedTriggeringPolicy interval="24" modulate="true"/> <SizeBasedTriggeringPolicy size="50 MB"/>\ </Policies> <DefaultRolloverStrategy max="30"> <Delete basePath="${logpath}/info" maxDepth="1"> <IfFileName glob="erp_info_*.log"/> <IfLastModified age="15d"/> </Delete> </DefaultRolloverStrategy> </RollingFile> <RollingFile name="warn" fileName="${logpath}/warn/erp_warn.log" filePattern="${logpath}/warn/erp_warn_%d{yyyy-MM-dd}-%i.log"> <Filters> <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/> <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> <PatternLayout pattern="[%d][%-5p][%t] %m (%F:%L)%n"/> <Policies> <TimeBasedTriggeringPolicy interval="24" modulate="true"/> <SizeBasedTriggeringPolicy size="50 MB"/>\ </Policies> <DefaultRolloverStrategy max="30"> <Delete basePath="${logpath}/warn" maxDepth="1"> <IfFileName glob="erp_warn_*.log"/> <IfLastModified age="15d"/> </Delete> </DefaultRolloverStrategy> </RollingFile> <RollingFile name="error" fileName="${logpath}/error/erp_error.log" filePattern="${logpath}/error/erp_error_%d{yyyy-MM-dd}-%i.log"> <Filters> <ThresholdFilter level="fatal" onMatch="DENY" onMismatch="NEUTRAL"/> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> <PatternLayout pattern="[%d][%-5p][%t] %m (%F:%L)%n"/> <Policies> <TimeBasedTriggeringPolicy interval="24" modulate="true"/> <!-- 每個文件最大50M --> <SizeBasedTriggeringPolicy size="50 MB"/>\ </Policies> <DefaultRolloverStrategy max="30"> <Delete basePath="${logpath}/error" maxDepth="1"> <IfFileName glob="erp_error_*.log"/> <!-- 設置最大保存時間為15天--> <IfLastModified age="15d"/> </Delete> </DefaultRolloverStrategy> </RollingFile> </Appenders> <!--切換輸出級別--> <Loggers> <Root level="info"> <AppenderRef ref="Console"/> <AppenderRef ref="debug"/> <AppenderRef ref="info"/> <AppenderRef ref="warn"/> <AppenderRef ref="error"/> </Root> </Loggers> </Configuration>
配置文件中增加配置:
#################### 7 log4j2 ################### logging.config=classpath:log4j2-dev.xml logging.level.org.springframework=INFO
4、使用
private static final Logger logger = LoggerFactory.getLogger(UserController.class); logger.info("未知異常!原因是:info"); logger.error("未知異常!原因是:error"); logger.warn("未知異常!原因是:warn");
簡單用法,完畢~
微服務中,服務眾多,分布在各個服務器中,我們一般不這樣使用,我們一般使用ELK來對日志進行統一收集和分析處理,ELK后面再說