Spring Boot系列(二)使用log4j2进行日志管理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZF_9420/article/details/83479905

上篇博客讲了如何创建一个springboot的应用以及application.yml的一些简单配置,若有不清楚的小伙伴请移步Spring Boot系列(一)初识SpringBoot
本篇博客就来讲讲springboot如何使用log4j2进行日志管理,springboot应用默认的日志记录组件是logback,然而我之前一直都是使用log4j来记录日志的,对于logback我实在是用不来,所以打算还是使用log4j。一番搜索下,发现log4j已经停止更新了,现在都使用它的升级版log4j2了,而且它的性能要比log4j强大许多。好了,至于log4j2,log4j和logback的区别这里就不多做介绍了,感兴趣的小伙伴可以自行搜索资料。下面就说说如何配置log4j2作为springboot的日志组件以及自定义日志配置
首先,我们得先建一个springboot项目,这个我就当作你们都会了。修改pom.xml如下

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<exclusions>
	<!-- 除去springboot的默认logback日志配置 -->
		<exclusion>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-logging</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<!-- 导入log4j2依赖 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
		

然后我们在src/main/resources目录下新建一个log4j2-spring.xml文件。里面写log4j2的自定义配置

<?xml version="1.0" encoding="UTF-8"?>

<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->

<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->

<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->

<configuration status="INFO" monitorInterval="30">

     <!--先定义所有的appender-->

     <appenders>

         <!--这个输出控制台的配置-->

         <console name="Console" target="SYSTEM_OUT">

         <!--输出日志的格式-->

             <PatternLayout pattern="%4p %d{yyyy-MM-dd HH:mm:ss.SSS} (%F\:%L)   -   %m%n"/>

         </console>

         <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->

         <RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/info.log"

                      filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">

             <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->       

             <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>

             <PatternLayout pattern="%4p %d{yyyy-MM-dd HH\:mm\:ssS} (%F\:%L)  -  %m%n"/>

             <Policies>

                 <TimeBasedTriggeringPolicy/>

                 <SizeBasedTriggeringPolicy size="100 MB"/>

             </Policies>

         </RollingFile>

         <RollingFile name="RollingFileWarn" fileName="${sys:user.home}/logs/warn.log"

                      filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">

             <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>

             <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>

             <Policies>

                 <TimeBasedTriggeringPolicy/>

                 <SizeBasedTriggeringPolicy size="100 MB"/>

             </Policies>

             <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->

             <DefaultRolloverStrategy max="20"/>

         </RollingFile>

         <RollingFile name="RollingFileError" fileName="${sys:user.home}/logs/error.log"

                      filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">

             <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>

             <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>

             <Policies>

                 <TimeBasedTriggeringPolicy/>

                 <SizeBasedTriggeringPolicy size="100 MB"/>

             </Policies>

         </RollingFile>

     </appenders>

     <!--然后定义logger,只有定义了logger并引入appender,appender才会生效-->

     <loggers>

         <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->

         <logger name="org.springframework" level="INFO"></logger>

         <logger name="org.mybatis" level="INFO"></logger>
         
         <logger name="org.hibernate" level="INFO"></logger>
         
         <logger name="com.zaxxer.hikari" level="INFO"></logger>
         
         <logger name="org.thymeleaf" level="INFO"></logger>

         <root level="all">

             <appender-ref ref="Console"/>
			 <!--  
             <appender-ref ref="RollingFileInfo"/>

             <appender-ref ref="RollingFileWarn"/>

             <appender-ref ref="RollingFileError"/>
			 -->
         </root>

     </loggers>

 </configuration>

然后在application.yml中配置log4j2-spring.xml文件的路径

logging:
  config: classpath:log4j2-spring.xml

这样就OK了
小伙们有没有发现每次我们修改代码后都得自己重启项目,改动才会生效,这样显得特别麻烦。我们可以在pom.xml中添加以下依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
	<optional>true</optional>
</dependency>

这样,我们每次改动后,只需要保存一下,项目便会自动重启,省事

没有更多推荐了,返回首页