Java提供了丰富的日志框架,尝尝让我们眼花缭乱,下面整理了他们之间的关系图:

SpringBoot 下提供了多种日志框架,接口层次主要是slf4j & apache common-logging 具体的实现主要有log4j & logback等,在SpringBoot页面,我们可以在resource目录下创建 logback-spring.xml 配置文件来标注日志的行为。
<?xml version="1.0" encoding="UTF-8" ?><configuration><!-- 导入基本的默认配置--><include resource="org/springframework/boot/logging/logback/base.xml"/><!-- 通用等级,按照包名配置,输出的等级为ERROR--><logger name="com.zhoutao123.spring.springboot" level="ERROR"/><!-- 根据环境来定义,优先级比上面的配置方式等级高--><!-- 默认的actioveProfile--><springProfile name="default"><logger name="com.zhoutao123.spring.springboot" level="DEBUG"/></springProfile><!--dev环境的配置--><springProfile name="dev"><!--配置日志的环境变量--><property name="APP_NAME" value="TEST"/><property name="PATH" value="/tmp/log"/><property name="FILE_LOG" value="${PATH}/${APP_NAME}/log.log"/><!-- Appender 配置--><appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="APP"><!--配置日志目录--><file>${FILE_LOG}</file><!--配置日志文件的编码以及格式--><encoder><charset>utf8</charset><pattern><![CDATA[%d{yyyy年MM月dd日 HH:mm:ss.SSS} 线程:[%thread] %X{TRACE_ID} %X{USER_ID} %-5level %logger.%M - %msg%n]]></pattern></encoder><!-- 规则策略--><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!--文件的保存位置信息--><fileNamePattern>${PATH}/${APP_NAME}/%d{yyyy-MM-dd}.%i.log</fileNamePattern><!--文件的最大大小,保存历史文件的个数,总体文件大小限制--><maxFileSize>5MB</maxFileSize><maxHistory>100</maxHistory><totalSizeCap>20GB</totalSizeCap></rollingPolicy></appender><!--配置日志输出信息,输出等级为TRACE,输出到APP策略文件--><logger name="com.zhoutao123.spring.springboot" level="TRACE"><appender-ref ref="APP"/></logger></springProfile><springProfile name="prod"><logger name="com.zhoutao123.spring.springboot" level="WARN"/></springProfile></configuration>
由于这里设置的是默认的activeProfile=dev,所以需要在application.yml 中设置激活的actioveProfile=dev,同时需要在resource目录创建 application-dev.xml 文件,内容为空
spring:profiles:active: dev
在项目中添加日志输出点
package com.zhoutao123.spring.springboot;@SpringBootApplicationpublic class Application {public static final Logger log = LoggerFactory.getLogger(Application.class);public static void main(String[] args) {SpringApplication.run(Application.class, args);}@PostConstructprivate void printLog(){log.trace("这是trace级别日志");log.debug("这是debug级别日志");log.info("这是info级别日志");log.warn("这是warn级别日志");log.error("这是error级别日志");}}
然后在日志中文件就可以看到这些日志文件
# 查看目录结构 & 查看日志内容$ tree -h -R 'log' && cat ./log/TEST/log.loglog└── [ 96] TEST└── [2.8K] log.log1 directory, 1 file2020年05月03日 09:55:12.672 线程:[main] INFO com.zhoutao123.spring.springboot.Application.logStarting - Starting Application on zhoutaodeMBP.lan with PID 6734 (/Users/zhoutao/workspace/MyGithub/SpringBoot/build/classes/java/main started by zhoutao in /Users/zhoutao/workspace/MyGithub/SpringBoot)2020年05月03日 09:55:12.676 线程:[main] DEBUG com.zhoutao123.spring.springboot.Application.logStarting - Running with Spring Boot v2.2.6.RELEASE, Spring v5.2.5.RELEASE2020年05月03日 09:55:12.676 线程:[main] INFO com.zhoutao123.spring.springboot.Application.logStartupProfileInfo - The following profiles are active: dev2020年05月03日 09:55:13.290 线程:[main] TRACE com.zhoutao123.spring.springboot.Application.printLog - 这是trace级别日志2020年05月03日 09:55:13.291 线程:[main] DEBUG com.zhoutao123.spring.springboot.Application.printLog - 这是debug级别日志2020年05月03日 09:55:13.291 线程:[main] INFO com.zhoutao123.spring.springboot.Application.printLog - 这是info级别日志2020年05月03日 09:55:13.291 线程:[main] WARN com.zhoutao123.spring.springboot.Application.printLog - 这是warn级别日志2020年05月03日 09:55:13.291 线程:[main] ERROR com.zhoutao123.spring.springboot.Application.printLog - 这是error级别日志2020年05月03日 09:55:13.485 线程:[main] INFO com.zhoutao123.spring.springboot.Application.logStarted - Started Application in 1.157 seconds (JVM running for 1.546)
