SpringBoot整合logback日志框架
一、基本情况概述
1、SpringBoot默认集成了logback框架,想要修改为log4j日志框架,需要排除默认的log实现
2、配置spring的日志输出形式有两种方式
①通过application.properties里面进行简单的设置
②通过外置的logback-spring.xml配置文件进行显式配置
二、简单的application.properties配置
此种方式只支持默认的logback日志形式,通过logging开头的属性进行简单的预定义配置项设置,较为简单,满足一些简单的需求。例如,建议使用STS(Spring Tool Suits)工具,有较好的提示
#日志设置
#springboot所有内部核心logger(包括嵌入式tomcat, mybatis, hibernate, spring)输出更多内容,自己应用并不会输出
debug=false
#彩色输出
spring.output.ansi.enabled=detect#外置的配置文件位置,设置之后,以下的一些日志配置失效
logging.config=classpath:logback-spring.xml
logging.file.path=./log
#logging.file.name=./spring.log
logging.file.max-history=7
logging.file.max-size=10MB
logging.pattern.rolling-file-name=${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
logging.level.com.example=info
#logging.pattern.console=
#logging.pattern.file=
#激活哪个日志配置
spring.profiles.active=prod
三、通过传统的外置配置文件形式
说明,文件名一定设置为logback-spring.xml, 利用这种方式可以通过<springProfile> 标签进行生产环境和开发环境的快捷设置,
通过在application.properties文件中的
spring.profiles.active=prod
进行设置即可,网上找的也都差不多,觉得不够详细的,可以查找相关记录进行修改
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <contextName>warning_message_receiver</contextName> <property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%logger{60}:%line] - %msg%n" /> <!-- windows机器上进行运行测试的日志记录地址 --> <property name="LOG_HOME" value="./log"></property> <!-- 部署之后的日志地址 --> <!-- <property name="LOG_HOME" value="/var/project/run/log/"></property> --> <!-- LEVEL:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF --> <!-- 彩色日志 --> <!-- 彩色日志依赖的渲染类 --> <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /> <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /> <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /> <!-- 彩色日志格式 --> <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> <!-- 控制台输出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${CONSOLE_LOG_PATTERN}</pattern> </layout> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>ACCEPT</onMismatch> </filter> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>WARN</level> <onMatch>ACCEPT</onMatch> <onMismatch>ACCEPT</onMismatch> </filter> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 输出到文件 --> <!-- <appender name="fileAppender" class="ch.qos.logback.core.FileAppender"> <file>${LOG_HOME}/data_cleaning.log</file> <append>true</append> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${pattern}</pattern> </encoder> </appender> --> <!-- 滚动输出到文件 --> <!-- RollingFileAppender的<file>子节点可有可无,通过设置<file>,可以为活动文件和归档文件指定不同位置,当前日志总是记录到file指定的文件(活动文件),活动文件的名字不会改变; 如果没设置file,活动文件的名字会根据fileNamePattern 的值,每隔一段时间改变一次。“/”或者“\”会被当做目录分隔符。 --> <appender name="traceRollingFileApppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/warning_message_receiver_TRACE.log</file> <!-- RollingPolicy实际上就是负责日志文件的切换以及重命名的。包括日志文件归档,计算日志文件名,压缩工作等 --> <!-- 当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 必要节点,包含文件名及"%d"转换符,"%d"可以包含一个java.text.SimpleDateFormat指定的时间格式,默认格式是 yyyy-MM-dd --> <fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/warning_message_receiver_TRACE%d{yyyy-MM-dd}.log.%i.gz</fileNamePattern> <!-- TriggeringPolicy 负责RollingFileAppender何时发生日志滚动 --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>20MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>20</maxHistory> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${pattern}</pattern> </layout> <!-- LevelFilter: 级别过滤器,根据日志级别进行过滤 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>TRACE</level> <!-- 用于配置符合过滤条件的操作 ACCEPT:日志会被立即处理,不再经过剩余过滤器 --> <onMatch>ACCEPT</onMatch> <!-- 用于配置不符合过滤条件的操作 DENY:日志将立即被抛弃不再经过其他过滤器 --> <onMismatch>DENY</onMismatch> </filter> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <!-- 用于配置符合过滤条件的操作 ACCEPT:日志会被立即处理,不再经过剩余过滤器 --> <onMatch>ACCEPT</onMatch> <!-- 用于配置不符合过滤条件的操作 DENY:日志将立即被抛弃不再经过其他过滤器 --> <onMismatch>DENY</onMismatch> </filter> </appender> <appender name="infoRollingFileApppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/warning_message_receiver_INFO.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/warning_message_receiver_INFO%d{yyyy-MM-dd}.log.%i.gz</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>20MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>20</maxHistory> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${pattern}</pattern> </layout> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <appender name="warnRollingFileApppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/warning_message_receiver_WARN.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/warning_message_receiver_WARN%d{yyyy-MM-dd}.log.%i.gz</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>20MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>20</maxHistory> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${pattern}</pattern> </layout> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>WARN</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <appender name="errorRollingFileApppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/warning_message_receiver_ERROR.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/warning_message_receiver_ERROR%d{yyyy-MM-dd}.log.%i.gz</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>20MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>20</maxHistory> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${pattern}</pattern> </layout> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <springProfile name="dev"> <!-- 配置com.example包的日志规则 --> <logger name="com.example" level="info" additivity="false"> <appender-ref ref="STDOUT" /> <appender-ref ref="infoRollingFileApppender" /> <appender-ref ref="traceRollingFileApppender" /> <appender-ref ref="warnRollingFileApppender" /> <appender-ref ref="errorRollingFileApppender" /> </logger> </springProfile> <springProfile name="prod"> <!-- 配置com.example包的日志规则 --> <logger name="com.example" level="info" additivity="false"> <!-- <appender-ref ref="STDOUT" /> --> <appender-ref ref="infoRollingFileApppender" /> <appender-ref ref="traceRollingFileApppender" /> <appender-ref ref="warnRollingFileApppender" /> <appender-ref ref="errorRollingFileApppender" /> </logger> </springProfile> <!-- 根节点日志规则 --> <root level="info"> <appender-ref ref="STDOUT" /> </root> </configuration>
四、拓展
通过application.properties里面设置debug=true可以开启spring更详细的日志;
采用外置配置文件,则通过修改<root>节点的level属性为debug即可
参考网址 : https://www.cnblogs.com/jpfss/p/8341920.html
极简版本:https://www.edoou.com/articles/1574161445933464