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