日志概要
日志的框架基本分为 日志的抽象层 和 日志的实现层。
主要的日志抽象层
- JCL(Jakarta Commons Logging)
- jboss-logging
- SLF4j(Simple Logging Facade for Java)
主要的日志实现层-----配置文件
- Log4j--------------------------------Log4j.properties
- JUL(java.util.logging)-----------logging.properties
- Log4j2------------------------------log4j2-spring.xml or log4j2.xml
- Logback----------------------------logback-spring.xml ,logback-spring.groovy,logback.xml or logback.groovy
→logback.xml直接被日志框架识别 ,logback-spring.xml日志框架就不直接加载日志配置项,由SpringBoot加载,我们可以在里面写自己的配置
例如
<springProfile name="dev">
<!-- 可以指定某段配置只在某个环境下生效 -->
</springProfile>
<springProfile name!="dev">
<!-- 可以指定某段配置只在某个环境下生效 -->
</springProfile>
Hibernate选用的 jboss-logging
Spring Boot:底层是Spring框架,Spring默认框架是JCL;
SpringBoot选用 SLF4J 和 logback
每个日志框架的实现框架都有自己的配置文件。使用slf4j以后,配置文件还是做成日志实现框架本身的配置文件;
SLF4J使用
配置设定
由于SpringBoot2 默认支持SLF4J,因此,我们不用添加任何依赖
可以直接通过配置 application.yml / application.properties 指定出力level
#Log level
logging.level.root=INFO
logging.level.org.springframework.web=INFO
也可以自己生成配置文件·,更加灵活控制输入。
例
<?xml version="1.0"?>
<configuration>
<!-- #Formate
#%d:Date #%thread:Thread No #%-5level:Left number level
#%logger{50}:char number #%msg:message #%n: -->
<property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
<!-- Define path. Use absolutly path. -->
<property name="LOG_FILE" value="C:/Desktop/log/spring-log.%d{yyyy-MM-dd}.%i.log" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder
by default -->
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE}</fileNamePattern>
<!-- keep 30 days' worth of history -->
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- Max file size. -->
<maxFileSize>2MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- if Over delete old file. -->
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
</appender>
<!-- project default level -->
<logger name="com.awscloud" level="DEBUG" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<!-- system default level -->
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>
使用
因为已经添加过了 lombok 的插件,所以可以直接使用注释 @Slf4j
例
@Slf4j
@ApiModel(description = "テストコントローラ")
@RestController
public class SampleController {
@RequestMapping(value="/sendmessage", method = RequestMethod.GET)
@ApiOperation("Test")
public String sendmessage() {
log.info("This is sendmessage log.");
return "Hello!, This is a sample for SpringBoot API. ";
}
}
直接就可以在控制端输入了log,
如果想输入彩色信息,需要在 logback-spring.xml 文件内添加
<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" />
<!-- pattern -->
<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}}"/>
使用时pattern 替换为 CONSOLE_LOG_PATTERN 。
另外默认的彩色输出设定是 false,需要在
application.yml / application.properties 指定
spring:
output:
ansi:
enabled: always