默认你已经搭建好spring boot框架
- 去除对spring-boot-starter-logging的依赖,在spring boot的jar包中,目测logging的jar包是spring-boot-starter的依赖包,所有其他对spring-boot-starter有依赖的包,包括spring-boot-starter都要去除logging,包括spring-boot-starter-test、spring-boot-starter-web、spring-boot-starter-thymeleaf、spring-boot-starter,将如下代码加入对应的dependency中
<exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions>
- 加入log4j2的jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<!-- 可以指定版本号<version>2.1.1.RELEASE</version>-->
</dependency> - application.yml的配置,就是指定log4j2配置文件的位置,其他所有关于日志的就在里面配就可以了
logging: config: classpath:log4j2.xml # application.properties里面可以写logging.config=classpath:log4j2.xml
- log4j2.xml配置
<?xml version="1.0" encoding="UTF-8"?> <configuration status="OFF"> <appenders> <Console name="Console" target="SYSTEM_OUT"> <!--只接受程序中DEBUG级别的日志进行处理--> <!--线程信息:[%thread] 日志的五个级别:%-5level --> <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5level %class{36} %L %M - %msg%xEx%n"/> </Console> <!--处理DEBUG级别的日志,并把该日志放到logs/debug.log文件中--> <!--打印出DEBUG级别日志,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--> <RollingFile name="RollingFileDebug" fileName="./logs/debug.log" filePattern="logs/$${date:yyyy-MM}/debug-%d{yyyy-MM-dd}-%i.log.gz"> <Filters> <ThresholdFilter level="DEBUG"/> <ThresholdFilter level="INFO" onMatch="DENY" onMismatch="NEUTRAL"/> </Filters> <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] %class{36} %L %M - %msg%xEx%n"/> <Policies> <SizeBasedTriggeringPolicy size="100 MB"/> <TimeBasedTriggeringPolicy/> </Policies> <!--经测试判断,当有新的压缩文件写入时,会判断并处理最后一次修改时间超过30天的文件,就是会保留近30天的日志文件--> <!--<CronTriggeringPolicy schedule="* * * * * ?"/>--> <DefaultRolloverStrategy> <Delete basePath="logs" maxDepth="2"> <IfFileName glob="*/debug-*.log.gz" /> <IfLastModified age="30d" /> </Delete> </DefaultRolloverStrategy> </RollingFile> <!--处理INFO级别的日志,并把该日志放到logs/info.log文件中--> <RollingFile name="RollingFileInfo" fileName="./logs/info.log" filePattern="logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz"> <Filters> <!--只接受INFO级别的日志,其余的全部拒绝处理--> <ThresholdFilter level="INFO"/> <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/> </Filters> <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] %class{36} %L %M - %msg%xEx%n"/> <Policies> <SizeBasedTriggeringPolicy size="50 MB"/> <TimeBasedTriggeringPolicy/> </Policies> <DefaultRolloverStrategy> <Delete basePath="logs" maxDepth="2"> <IfFileName glob="*/info-*.log.gz" /> <IfLastModified age="30d" /> </Delete> </DefaultRolloverStrategy> </RollingFile> <!--处理WARN级别的日志,并把该日志放到logs/warn.log文件中--> <RollingFile name="RollingFileWarn" fileName="./logs/warn.log" filePattern="logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz"> <Filters> <ThresholdFilter level="WARN"/> <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/> </Filters> <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] %class{36} %L %M - %msg%xEx%n"/> <Policies> <SizeBasedTriggeringPolicy size="50 MB"/> <TimeBasedTriggeringPolicy/> </Policies> <DefaultRolloverStrategy> <Delete basePath="logs" maxDepth="2"> <IfFileName glob="*/warn-*.log.gz" /> <IfLastModified age="30d" /> </Delete> </DefaultRolloverStrategy> </RollingFile> <!--处理error级别的日志,并把该日志放到logs/error.log文件中--> <RollingFile name="RollingFileError" fileName="./logs/error.log" filePattern="logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz"> <ThresholdFilter level="ERROR"/> <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] %class{36} %L %M - %msg%xEx%n"/> <Policies> <SizeBasedTriggeringPolicy size="50 MB"/> <TimeBasedTriggeringPolicy/> </Policies> <DefaultRolloverStrategy> <Delete basePath="logs" maxDepth="2"> <IfFileName glob="*/error-*.log.gz" /> <IfLastModified age="30d" /> </Delete> </DefaultRolloverStrategy> </RollingFile> </appenders> <loggers> <root level="INFO"> <!--DEBUG、INFO、WARN、ERROR、FATAL--> <appender-ref ref="Console"/> <appender-ref ref="RollingFileInfo"/> <appender-ref ref="RollingFileWarn"/> <appender-ref ref="RollingFileError"/> <appender-ref ref="RollingFileDebug"/> </root> <!--log4j2 自带过滤日志、已删除--> <!--使用druid记录日志,可参考 https://github.com/alibaba/druid/wiki/Druid中使用log4j2进行日志输出--> <!--打印指定Mapper接口的SQL--> <logger name="com.demo.dao.UserMapper" level="DEBUG" /> </loggers> </configuration>
- mybatis日志指定
如上<logger name="com.demo.dao.UserMapper" level="DEBUG" />指定打印指定Mapper接口的SQL日志,name可以指定到具体接口,也可以指定到包,这就可以根据需求那些SQL可以打印,那些不需要打印