SpringBoot系列之集成logback实现日志打印(篇二)html
基于上篇博客SpringBoot系列之集成logback实现日志打印(篇一)以后,再写一篇博客进行补充java
logback是一款开源的日志框架,内核重写了,是基于log4j基础进行改良的。其官网为http://logback.qos.ch/index.html,logback在性能上有很大提高,拥有更多特性。git
简单介绍一下日志级别,按照从低到高排序:trace < debug < info < warn < error,eg:假如日志级别为info,则只会打印info级别及其高级别的日志,因此在项目中,能够经过调高日志级别,打少点日志,反之,想打多点就调低日志级别github
SpringBoot支持的不一样日志系统的配置文件:web
Logging System | Customization |
---|---|
Logback | logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy |
Log4j2 | log4j2-spring.xml or log4j2.xml |
JDK (Java Util Logging) | logging.properties |
从前面的学习,SpringBoot系列之日志框架使用教程,咱们知道了SpringBoot默认集成的是logback的,因此本博客介绍一下logback自定义配置的基本用法spring
SpringBoot官方的建议也是推荐使用logback-spring.xml版本的sql
When possible, we recommend that you use the -spring variants for your logging configuration (for example, logback-spring.xml rather than logback.xml). If you use standard configuration locations, Spring cannot completely control log initialization.apache
缘由是为何?咱们在官网往下翻,能够发现:springboot
Because the standard logback.xml configuration file is loaded too early, you cannot use extensions in it. You need to either use logback-spring.xml or define a logging.config property.mybatis
翻译过来就是大概意思就是logback.xml在SpringBoot启动以前就被加载了,也就是ApplicationContext启动以前就被加载了,很显然,这样是不能够加载到SpringBoot的一下高级配置,而logback-spring.xml是支持的,好比在官网就列举了以下两种高级拓展配置,这两种配置只能用logback-spring.xml才是可使用的,logback.xml是不支持的
ok,profile-specific configuration指的就是多环境配置
<springProfile name="staging"> <!-- configuration to be enabled when the "staging" profile is active --> </springProfile> <springProfile name="dev | staging"> <!-- configuration to be enabled when the "dev" or "staging" profiles are active --> </springProfile> <springProfile name="!production"> <!-- configuration to be enabled when the "production" profile is not active --> </springProfile>
例子,dev环境用一个日志格式,非dev环境用另一种日志格式
而后在application.properties,配置环境:spring.profiles.active= dev
<!-- 打印到控制台 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- 格式化日志内容--> <encoder> <springProfile name="dev"> <pattern>${LOG_PATTERN}</pattern> </springProfile> <springProfile name="!dev"> <pattern>%d{yyyy-MM-dd HH24:mm:ss.SSS} {%thread} %-5level %logger{50} - %msg%n</pattern> </springProfile> </encoder> </appender>
ok,给出本身的logback-spring.xml:
<?xml version="1.0" encoding="UTF-8" ?> <configuration debug="false" scan="true"> <!-- 日志级别 --> <springProperty scope="context" name="LOG_ROOT_LEVEL" source="logging.level.root" defaultValue="DEBUG"/> <!-- 标识这个"STDOUT" 将会添加到这个logger --> <springProperty scope="context" name="STDOUT" source="log.stdout" defaultValue="STDOUT"/> <!-- 日志格式,%d:日期;%thread:线程名;%-5level:日志级别从左显示5个字符长度,列如:DEBUG; %logger{36}:java类名,例如:com.muses.taoshop.MyTest,36表示字符长度;%msg:日志内容;%n:换行 --> <property name="LOG_PATTERN" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" /> <!-- root日志级别--> <property name="${LOG_ROOT_LEVEL}" value="DEBUG" /> <!-- 日志跟目录 --> <property name="LOG_HOME" value="data/logs" /> <!-- 日志文件路径--> <property name="LOG_DIR" value="${LOG_HOME}/%d{yyyyMMdd}" /> <!-- 日志文件名称 --> <property name="LOG_PREFIX" value="portal" /> <!-- 日志文件编码 --> <property name="LOG_CHARSET" value="utf-8" /> <!-- 配置日志的滚动时间,保存时间为15天--> <property name="MAX_HISTORY" value="15" /> <!-- 文件大小,默认为10MB--> <property name="MAX_FILE_SIZE" value="10" /> <!-- 打印到控制台 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- 格式化日志内容--> <encoder> <springProfile name="dev"> <pattern>${LOG_PATTERN}</pattern> </springProfile> <springProfile name="!dev"> <pattern>%d{yyyy-MM-dd HH24:mm:ss.SSS} {%thread} %-5level %logger{50} - %msg%n</pattern> </springProfile> </encoder> </appender> <!-- 打印全部日志,保存到文件--> <appender name="FILE_ALL" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/all_${LOG_PREFIX}.log</file> <!-- 设置滚动策略,当日志文件大小超过${MAX_FILE_SIZE}时,新的日志内容写到新的日志文件--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 新的日志文件路径名称,%d:日期 %i:i是变量 --> <fileNamePattern>${LOG_DIR}/all_${LOG_PREFIX}%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 保存日志15天 --> <maxHistory>${MAX_HISTORY}</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <!-- 日志文件的最大大小 --> <maxFileSize>${MAX_FILE_SIZE}</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <!-- 格式日志文件内容--> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${LOG_PATTERN}</pattern> </layout> </appender> <!-- 打印错误日志,保存到文件--> <appender name="FILE_ERR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/err_${LOG_PREFIX}.log</file> <!-- 设置滚动策略,当日志文件大小超过${MAX_FILE_SIZE}时,新的日志内容写到新的日志文件--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 新的日志文件路径名称,%d:日期 %i:i是变量 --> <fileNamePattern>${LOG_DIR}/err_${LOG_PREFIX}%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 保存日志15天 --> <maxHistory>${MAX_HISTORY}</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <!-- 日志文件的最大大小 --> <maxFileSize>${MAX_FILE_SIZE}</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <!-- 格式日志文件内容--> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${LOG_PATTERN}</pattern> </layout> </appender> <!-- rest template logger--> <logger name="org.springframework.web.client.RestTemplate" level="DEBUG" /> <logger name="org.springframework" level="DEBUG" /> <!-- jdbc--> <logger name="jdbc.sqltiming" level="DEBUG" /> <logger name="org.mybatis" level="DEBUG" /> <!-- zookeeper--> <logger name="org.apache.zookeeper" level="ERROR" /> <!-- dubbo --> <logger name="com.alibaba.dubbo.monitor" level="ERROR"/> <logger name="com.alibaba.dubbo.remoting" level="ERROR" /> <!-- 日志输出级别 --> <root leve="${LOG_ROOT_LEVEL}"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE_ALL" /> <appender-ref ref="FILE_ERR" /> </root> </configuration>
附录:
logging manual:SpringBoot日志官方手册
example source:日志配置github代码下载连接