springboot项目(7)集成logback.xml

2025-11-03 11:00:03

1、老规矩要集成的项目是按照最新springboot项目(六)来集成的,是其他的Springboot项目也是没关系的,基本上是属于通用。废话不多说直接上教程。

2、首先在resouces目录下创建一个logback-spring.xml文件,为什么叫这个名字呢?是因为logback默认的会从资源目录读取这个文件,而且使用这个命名有好处:可以使用springProperty和springProfile标签。

3、其次是spring-boot-starter-parent依赖已经包含了logback-classic,log4j-to-slf4j等依赖,所以我们不需要在pom.xml文件中重新添加依赖了,怎么看呢?ctrl+单击点spring-boot-starter-parent==》spring-boot-dependencies==》spring-boot-starter==》spring-boot-starter-logging==》

springboot项目(7)集成logback.xml

springboot项目(7)集成logback.xml

springboot项目(7)集成logback.xml

springboot项目(7)集成logback.xml

springboot项目(7)集成logback.xml

4、然后配置logback-spring.xml内容如下:

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

 

<configuration scan="true" scanPeriod="60 seconds" debug="false">

 

   <contextName>logback</contextName>

 

   <property resource="application.yml"/>

 

   <springProperty scope="context" name="log.path" source="logging.path"/>

 

   <springProperty scope="context" name="log.lv" source="logging.lv"/>

 

   <springProperty scope="context" name="log.dateSize" source="logging.dateSize"/>

 

   <!--输出到控制台-->

 

   <appender name="console" class="ch.qos.logback.core.ConsoleAppender">

 

       <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->

 

       <filter class="ch.qos.logback.classic.filter.ThresholdFilter">

 

           <level>${log.lv}</level>

 

       </filter>

 

       <encoder>

 

           <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>

 

           <!--编码-->

 

           <charset>utf-8</charset>

 

       </encoder>

 

   </appender>

 

   <!--输出到debug-->

 

   <appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">

 

       <!-- 正在记录的日志文件的路径及文件名 -->

 

       <file>${log.path}/logback-debug.log</file>

 

       <!-- 日志记录器的滚动策略,按日期,按大小记录 -->

 

       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

 

           <fileNamePattern>${log.path}/logback-debug-%d{yyyy-MM-dd}_%i.log</fileNamePattern>

 

           <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

 

               <maxFileSize>100MB</maxFileSize>

 

           </timeBasedFileNamingAndTriggeringPolicy>

 

           <!--日志文件保留天数-->

 

           <maxHistory>15</maxHistory>

 

       </rollingPolicy>

 

       <append>true</append>

 

       <encoder>

 

           <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>

 

           <!--编码-->

 

           <charset>utf-8</charset>

 

       </encoder>

 

       <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印DEBUG日志 -->

 

           <level>DEBUG</level>

 

           <onMatch>ACCEPT</onMatch>

 

           <onMismatch>DENY</onMismatch>

 

       </filter>

 

   </appender>

 

   <!--输出到info-->

 

   <appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender">

 

       <!-- 正在记录的日志文件的路径及文件名 -->

 

       <file>${log.path}/logback-info.log</file>

 

       <!-- 日志记录器的滚动策略,按日期,按大小记录 -->

 

       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

 

           <fileNamePattern>${log.path}/logback-info-%d{yyyy-MM-dd}_%i.log</fileNamePattern>

 

           <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

 

               <maxFileSize>100MB</maxFileSize>

 

           </timeBasedFileNamingAndTriggeringPolicy>

 

           <!--日志文件保留天数-->

 

           <maxHistory>${log.dateSize}</maxHistory>

 

       </rollingPolicy>

 

       <append>true</append>

 

       <encoder>

 

           <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>

 

           <!--编码-->

 

           <charset>utf-8</charset>

 

       </encoder>

 

       <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印INFO日志 -->

 

           <level>INFO</level>

 

           <onMatch>ACCEPT</onMatch>

 

           <onMismatch>DENY</onMismatch>

 

       </filter>

 

   </appender>

 

   <!--输出到warn-->

 

   <appender name="warn" class="ch.qos.logback.core.rolling.RollingFileAppender">

 

       <!-- 正在记录的日志文件的路径及文件名 -->

 

       <file>${log.path}/logback-warn.log</file>

 

       <!-- 日志记录器的滚动策略,按日期,按大小记录 -->

 

       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

 

           <fileNamePattern>${log.path}/logback-warn-%d{yyyy-MM-dd}_%i.log</fileNamePattern>

 

           <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

 

               <maxFileSize>100MB</maxFileSize>

 

           </timeBasedFileNamingAndTriggeringPolicy>

 

           <!--日志文件保留天数-->

 

           <maxHistory>${log.dateSize}</maxHistory>

 

       </rollingPolicy>

 

       <append>true</append>

 

       <encoder>

 

           <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>

 

           <charset>utf-8</charset>

 

       </encoder>

 

       <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印WARN日志 -->

 

           <level>WARN</level>

 

           <onMatch>ACCEPT</onMatch>

 

           <onMismatch>DENY</onMismatch>

 

       </filter>

 

   </appender>

 

   <!--输出到error-->

 

   <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">

 

       <!-- 正在记录的日志文件的路径及文件名 -->

 

       <file>${log.path}/logback-error.log</file>

 

       <!-- 日志记录器的滚动策略,按日期,按大小记录 -->

 

       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

 

           <fileNamePattern>${log.path}/logback-error-%d{yyyy-MM-dd}_%i.log</fileNamePattern>

 

           <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

 

               <maxFileSize>100MB</maxFileSize>

 

           </timeBasedFileNamingAndTriggeringPolicy>

 

           <!--日志文件保留天数-->

 

           <maxHistory>${log.dateSize}</maxHistory>

 

       </rollingPolicy>

 

       <append>true</append>

 

       <encoder>

 

           <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>

 

           <charset>utf-8</charset>

 

       </encoder>

 

       <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印ERROR日志 -->

 

           <level>ERROR</level>

 

           <onMatch>ACCEPT</onMatch>

 

           <onMismatch>DENY</onMismatch>

 

       </filter>

 

   </appender>

 

   <!--邮件配置-->

 

   <springProperty scope="context" name="smtpHost" source="email.smtpHost"/>

 

   <!-- SMTP server的端口地址。 -->

 

   <springProperty scope="context" name="smtpPort" source="email.smtpPort"/>

 

   <!-- 发送邮件账号 -->

 

   <springProperty scope="context" name="username" source="email.username"/>

 

   <!-- 发送邮件密码(此密码客户端授权密码,不是邮箱登录密码) -->

 

   <springProperty scope="context" name="password" source="email.password"/>

 

   <!-- 如果设置为true,appender将会使用SSL连接到日志服务器。默认值:false -->

 

   <springProperty scope="context" name="SSL" source="email.SSL"/>

 

   <!-- 指定收件人邮箱,可设置多个邮箱,收件人账号需以逗号隔开 -->

 

   <springProperty scope="context" name="email_to" source="email.email_to"/>

 

   <!-- 指定发件人名称。 -->

 

   <springProperty scope="context" name="email_from" source="email.email_from"/>

 

   <!-- 标题  -->

 

   <property name="email_subject" value="【System Error】: %msg" />

 

   <!-- 邮件发送的appender -->

 

   <appender name="Email" class="ch.qos.logback.classic.net.SMTPAppender">

 

       <smtpHost>${smtpHost}</smtpHost>

 

       <smtpPort>${smtpPort}</smtpPort>

 

       <username>${username}</username>

 

       <password>${password}</password>

 

       <asynchronousSending>false</asynchronousSending>

 

       <SSL>${SSL}</SSL>

 

       <to>${email_to}</to>

 

       <from>${email_from}</from>

 

       <subject>${email_subject}</subject>

 

       <!-- html格式 -->

 

       <layout class="ch.qos.logback.classic.html.HTMLLayout">

 

           <Pattern>%date - %level [%thread] %logger{50} %line %message</Pattern>

 

       </layout>

 

       <!-- 等级过滤器,指定ERROR级别发送 -->

 

       <filter class="ch.qos.logback.classic.filter.LevelFilter">

 

           <level>ERROR</level>

 

           <onMatch>ACCEPT</onMatch>

 

           <onMismatch>DENY</onMismatch>

 

       </filter>

 

       <!-- 每个电子邮件只发送一个日志条目 -->

 

       <cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker">

 

           <bufferSize>1</bufferSize>

 

       </cyclicBufferTracker>

 

   </appender>

 

   <!--不同环境分别设置对应的日志输出节点 -->

 

   <!--开发-->

 

   <springProfile name="dev">

 

       <root level="debug">

 

           <appender-ref ref="console" />

 

           <appender-ref ref="info" />

 

           <appender-ref ref="warn" />

 

           <appender-ref ref="error" />

 

       </root>

 

   </springProfile>

 

   <!--测试-->

 

   <springProfile name="test">

 

       <root level="warn">

 

           <appender-ref ref="console" />

 

           <appender-ref ref="warn" />

 

           <appender-ref ref="error" />

 

           <appender-ref ref="Email" />

 

       </root>

 

   </springProfile>

 

   <!--生产环境-->

 

   <springProfile name="pro">

 

       <root level="info">

 

           <appender-ref ref="console" />

 

           <appender-ref ref="debug" />

 

           <appender-ref ref="info" />

 

           <appender-ref ref="warn" />

 

           <appender-ref ref="error" />

 

           <appender-ref ref="Email" />

 

       </root>

 

   </springProfile>

 

</configuration>

5、配置完xml文件后配置yml或properties文件,配置如下(这里直接按yml文件为标准):

spring:

 

 profiles:

 

   active: dev #用来配置所属环境

#日志配置

 

logging:

 

 path: C:/WEB-INF/logs #保存日志

 

 lv: info # 控制台日志输出级别

 

 dateSize: 1 # 日志保存天数

 

#邮箱配置

 

email:

  #主机

 smtpHost: smtp.qq.com

 #端口(465或587)

 smtpPort: 465

 

 username: *********@qq.com

 

 password: *******************

 

 SSL: true

 

 email_from: *********@qq.com

 

 email_to: *********@qq.com,*********@qq.com

springboot项目(7)集成logback.xml

6、知识点1:由于logback-spring.xml先于application.yml被系统加载,所以想要引用application.yml文件中的数据,需要加入<property resource="application.yml"/>标签,引入后怎么获取到呢?比如想要获取日志保存天数,就需要引入<springProperty scope="context" name="log.dateSize" source="logging.dateSize"/>后面的引用,就只需要${log.dateSize}就可以了,中括号里面的值是springProperty 的name值。

知识点2:springProfile对应的是application.yml文件中的spring.profiles.active的值。

知识点3:配置文件中的邮件密码不是邮箱登录密码,而是客户端授权密码,如何获取查询QQ邮箱登陆第三方客户端获取授权码就可以了。

1、启动项目,我能能够看到日志被日志文件所记录,而且文件里面记录的时间与控制台打印的时间完全一致,如下图:

springboot项目(7)集成logback.xml

springboot项目(7)集成logback.xml

2、测试异常发送邮件:

@RunWith(SpringRunner.class)

 

@SpringBootTest

 

public class LogTest {

 

   private Logger log = LoggerFactory.getLogger(LogTest.class);

 

   @Test

 

   public void test() {

 

       log.error("出现异常需要发送邮件");

 

   }

 

}

springboot项目(7)集成logback.xml

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢