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工程
@ConditionalOnJndiJNDI存在指定项

Springboot与日志

1、日志框架

市面上的日志框架

JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j…

日志门面(日志抽象层)日志实现
JCL、SLF4J、jboss-loggingLog4j 、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、自定义日志配置

优先级从左往右

日志系统自定义日志配置
Logbacklogback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy
Log4j2log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging)logging.properties

为了帮助进行自定义,一些其他属性从Spring转移 Environment到System属性,如下表所述:

Spring Environment系统属性备注
logging.exception-conversion-wordLOG_EXCEPTION_CONVERSION_WORD记录异常时使用的转换字
logging.fileLOG_FILE如果已定义,则在默认日志配置中使用它。
logging.file.max-sizeLOG_FILE_MAX_SIZE最大日志文件大小(如果启用了LOG_FILE)(仅支持默认的Logback设置。)
logging.file.max-historyLOG_FILE_MAX_HISTORY要保留的最大归档日志文件数(如果启用了LOG_FILE)。(仅支持默认的Logback设置。)
logging.pathLOG_PATH如果已定义,则在默认日志配置中使用它。
logging.pattern.consoleCONSOLE_LOG_PATTERN要在控制台上使用的日志模式(stdout)。(仅支持默认的Logback设置。)
logging.pattern.dateformatLOG_DATEFORMAT_PATTERN日志日期格式的Appender模式。(仅支持默认的Logback设置。)
logging.pattern.fileFILE_LOG_PATTERN要在文件中使用的日志模式(如果LOG_FILE已启用)。(仅支持默认的Logback设置。)
logging.pattern.levelLOG_LEVEL_PATTERN呈现日志级别时使用的格式(默认%5p)。(仅支持默认的Logback设置。)
PIDPID当前进程ID(如果可能,则在未定义为OS环境变量时发现)。

今天的事情比较多,所以内容比较少,以上…

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值