SpringBoot默认使用SLF4J作为日志门面(相当于接口),Logback作为日志实现(实现可切换)
一.默认输出格式
1.日期时间
2.日志级别(从上至下级别越来越高):
TRACE:追踪框架流程日志,一般不使用
DEBUG:调试日志
INFO:关键、感兴趣日志
WARN:警告日志
ERROR:错误日志
3.进程ID
4.---:消息分隔符
5.线程名:用[]包裹
6.Logger名:产生这条日志的类名
7.消息:具体日志内容
二.使用
@Service
public class UserService{//创建UserService类对应的Logger(SLF4J包下)
private Logger logger= LoggerFactory.getLogger(getClass());
public void useLogger() {//使用
Loggerlogger.trace("TRACE");
logger.debug("DEBUG");
logger.info("INFO {} {}", "参1", "参2");
logger.warn("WARN");
logger.error("ERROR");
}
导入lombok后使用@Slf4j注解,会自动创建变量名为log的Logger
只会输出INFO及以上的日志级别,因为SpringBoot默认日志级别为INFO
三.配置
通过yml文件配置日志(以logging开头的日志)
项目中通常不使用该方式
原因:
1.日志需要较多自定义,放yml里导致其他配置也难以阅读
2.yml提供的日志配置只支持logback实现,切换实现后不可用
3.yml提供的logback配置不够全面
通过xml配置日志
1.appender:负责写日志的组件(输出到控制台、文件、日志服务器、消息队列等等)
2.appender-ref:引用某个appender
3.layout:配置日志输出格式
4.springProfile:配置日志在开发/测试/生产环境生效
5.springProperty:在xml配置中引用yml的配置值
6.property:在xml中定义值
logback-spring.xml模板示例
<?xml version="1.0" encoding="UTF-8"?>
<configuration><!--读取yml配置中的spring.application.name值赋值给FILE_NAME变量-->
<springProperty scope="context" name="FILE_NAME" source="spring.application.name"/><!--定义FILE_PATH变量-->
<property name="FILE_PATH" value="./logs"/>
<springProfile name="dev"><!--开发环境的日志配置-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!--输出到控制台-->
<layout><!--设置日志格式-->
<pattern>%d{yyyy-MM-dd HH:mm:ss}[%thread] %-5level %logger -%msg%n</pattern>
</layout>
</appender>
<root level="info"><!--设置日志等级 及 生效appender-->
<appender-ref ref="STDOUT"/>
</root>
</springProfile>
<springProfile name="test"><!--测试环境的日志配置-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout>
<pattern>%d{yyyy-MM-dd HH:mm:ss}[%thread] %-5level %logger -%msg%n</pattern>
</layout>
</appender><!--输出到文件,文件会根据日期、大小进行归档-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!--文件路径-->
<fileNamePattern>${FILE_PATH}/${FILE_NAME}%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>30</maxHistory><!--文件保存天数-->
<maxFileSize>10MB</maxFileSize><!--一个文件最大值-->
</rollingPolicy>
<layout>
<pattern>%d{yyyy-MM-dd HH:mm:ss}[%thread] %-5level %logger -%msg%n</pattern>
</layout>
</appender>
<root level="info">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
</root>
</springProfile>
<springProfile name="prod"><!--生产环境的日志配置-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${FILE_PATH}/${FILE_NAME}%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>30</maxHistory>
<maxFileSize>10MB</maxFileSize>
</rollingPolicy>
<layout>
<pattern>%d{yyyy-MM-dd HH:mm:ss}[%thread] %-5level %logger -%msg%n</pattern>
</layout>
</appender>
<root level="error">
<appender-ref ref="FILE"/>
</root>
</springProfile>
</configuration>