SpringBoot集成配置logbackspring.xml

编程

用logback而不用log4j是因为Logback是由log4j创始人设计的另一个开源日志组件,Logback的内核重写了,在一些关键执行路径上性能提升10倍以上。而且logback不仅性能提升了,初始化内存加载也更小了;而且官方网站有非常充分的文档;通过配置可以去除就日志文件等等。优点很多而且很强大。也是时下比较流行的springboot搭配。

创建logback-spring.xml文件

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

其次是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-->

配置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>

配置yml或properties文件

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

备注

知识点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邮箱登陆第三方客户端获取授权码就可以了。

以上是 SpringBoot集成配置logbackspring.xml 的全部内容, 来源链接: utcz.com/z/516873.html

回到顶部