Spring Boot 20天入门(day3)
@Conditional及其派生注解
原理:必须是@Conditional指定的条件成立,才会给容器中添加组件,配置在里面的所有内容才生效;
@Conditional派生注解 | 作用(判断是否满足指定要求) |
---|---|
@ConditionalOnjava | 系统的java版本是否符合 |
@ConditionalOnBean | 容器中存在指定Bean |
@ConditionalOnMissingBean | 容器中不存在指定Bean |
@ConditionalOnExpression | 满足SpEl表达式指定 |
@ConditionalOnClass | 系统中有指定的类 |
@ConditionalOnMissingClass | 系统中没有指定的类 |
@ConditionalOnSingleCandidate | 容器中只有一个指定的Bean,或者找个Bean是首选Bean |
@ConditionalOnProperty | 系统中指定的属性是否有指定的值 |
@ConditionalOnResource | 类路径下是否存在指定的资源文件 |
@ConditionalOnWebApplication | 当前工程是否是web工程 |
@ConditionalOnNotWebApplication | 当前工程不是web工程 |
@ConditionalOnJndi | JNDI存在指定项 |
Springboot与日志
1、日志框架
市面上的日志框架
JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j…
日志门面(日志抽象层) | 日志实现 |
---|---|
Log4j 、JUL、Log4j2、Logback |
左边选一个门面(抽象层)、右边选一个实现;
Springboot : 底层是Spring框架,Spring框架默认使用JCL;
Springboot将日志层进行了升级封装,选用SLF4j和logback
2、SLF4j使用
给系统里面导入slf4j和logback的实现jar;
每一个日志的实现框架都有自己的配置文件。使用slf4j,配置文件还是做成日志实现框架的配置文件;
如何让系统中的所有日志都统一到slf4j
1、使用中间包来替换原有的日志框架;
2、导入slf4j的其他实现
3、Springboot日志关系
Springboot最基本的依赖:starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
Springboot使用它来做日志功能:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<scope>compile</scope>
</dependency>
Spring-boot-starter-logging的依赖关系,可以将其他的日志框架统一转换成slf4j(适配器模式)
那么Springboot是如何进行转换的呢,我们点开log4j-to-slf4j看一下:
其实是直接将log4j的实现由slf4j的实现替代,从而达到转换的效果
总结:
1)、Springboot底层也是使用slf4j+logback的方式进行日志记录(2.x支持log4j)
2)、Springboot也把其他的日志都替换成了slf4j
3)、通过一些中间替换包进行转换(适配器模式)
4、日志使用
1、默认配置
springboot默认给我们配置好了日志
// 记录器
Logger logger = LoggerFactory.getLogger(SpringLoggingApplicationTests.class);
@Test
void contextLoads() {
// 日志级别;
// 由低到高,默认info起步,低于配置级别的日志不会显示
// 可以调整输出的日志级别。
logger.trace("这是track日志。。");
logger.debug("这是debug日志..");
logger.info("这是info日志...");
logger.warn("这是warn日志...");
logger.error("这是error...");
}
可以在配置文件中修改日期级别:
# logging.level.需要修改级别的包名=日志级别
logging.level.com.github=trace
也可以在命令行手动改变日志级别:
java -jar xxx.jar --trace
2、日志格式
Spring Boot的默认日志输出类似于以下示例:
2020-05-17 15:16:28.552 INFO 10412 --- [ main] c.g.s.SpringLoggingApplicationTests : Starting SpringLoggingApplicationTests on LAPTOP-UPVRKKQD with PID 10412 (started by 93985 in D:\java\spring-logging)
2020-05-17 15:16:28.556 DEBUG 10412 --- [ main] c.g.s.SpringLoggingApplicationTests : Running with Spring Boot v2.2.2.RELEASE, Spring v5.2.2.RELEASE
2020-05-17 15:16:28.563 INFO 10412 --- [ main] c.g.s.SpringLoggingApplicationTests : No active profile set, falling back to default profiles: default
2020-05-17 15:16:31.056 INFO 10412 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2020-05-17 15:16:31.395 INFO 10412 --- [ main] c.g.s.SpringLoggingApplicationTests : Started SpringLoggingApplicationTests in 3.36 seconds (JVM running for 4.951)
从左到右依次是:
1)Date and Time : 日期和时间
2)Log Level :日志级别
3)Process ID :进程id
4)— :分隔符
5)Thread Name :线程名字
6)Logger Name :日志名称,通常是类名
7)日志信息
3、将日志输出到文件
默认情况下,Springboot只会在控制台输出日志信息
若我们想要将日志信息输出到日志文件中,有两种方法:
1)、日志输出到一个文件中
将日志信息输出到项目根目录下,一个叫spring.log的文件下
logging.file.name=spring.log
2)、日志输出到一个文件夹下
将日志信息输出到项目根目录下,一个叫spring的文件夹下的log文件夹中的spring.log(Springboot的默认日志文件)
logging.file.path=/spring/log
4、自定义日志配置
优先级从左往右
日志系统 | 自定义日志配置 |
---|---|
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 |
为了帮助进行自定义,一些其他属性从Spring转移 Environment到System属性,如下表所述:
Spring Environment | 系统属性 | 备注 |
---|---|---|
logging.exception-conversion-word | LOG_EXCEPTION_CONVERSION_WORD | 记录异常时使用的转换字 |
logging.file | LOG_FILE | 如果已定义,则在默认日志配置中使用它。 |
logging.file.max-size | LOG_FILE_MAX_SIZE | 最大日志文件大小(如果启用了LOG_FILE)(仅支持默认的Logback设置。) |
logging.file.max-history | LOG_FILE_MAX_HISTORY | 要保留的最大归档日志文件数(如果启用了LOG_FILE)。(仅支持默认的Logback设置。) |
logging.path | LOG_PATH | 如果已定义,则在默认日志配置中使用它。 |
logging.pattern.console | CONSOLE_LOG_PATTERN | 要在控制台上使用的日志模式(stdout)。(仅支持默认的Logback设置。) |
logging.pattern.dateformat | LOG_DATEFORMAT_PATTERN | 日志日期格式的Appender模式。(仅支持默认的Logback设置。) |
logging.pattern.file | FILE_LOG_PATTERN | 要在文件中使用的日志模式(如果LOG_FILE已启用)。(仅支持默认的Logback设置。) |
logging.pattern.level | LOG_LEVEL_PATTERN | 呈现日志级别时使用的格式(默认%5p)。(仅支持默认的Logback设置。) |
PID | PID | 当前进程ID(如果可能,则在未定义为OS环境变量时发现)。 |
今天的事情比较多,所以内容比较少,以上…