springboot项目(7)集成logback.xml
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==》
4、然后配置logback-spring.xml内容如下:<?xml ver衡痕贤伎sion="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: 465username: *********@qq.compassword: *******************SSL: trueemail_from:*********@qq.comemail_to:*********@qq.com,*********@qq.com
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邮箱登陆第三方客户端获取授权码就可以了。