@Conditional
关于一些@Conditional注解的一些拓展注解
springboot与日志
1、常见框架
jul jcl jboss-logging logback log4j log4j2 slf4j
所有一般是选一个门面,一个具体实现。一个具体的实现推荐使用slf4j + logback
springboot:底层是Spring框架,Spring框架默认用的是jcl
springboot 选用的是slf4j和logback
2、SLF4J使用
如何用slf4j?
开发的时候,日志记录方法的调用,不应该直接调用日志的实现类,而是调用日志抽象层里面的方法。
首先给系统里面导入slf4j和logback的jar包
使用日志框架打印日志:
@SpringBootTest
class Springboot03LoggingApplicationTests {
//记录器
Logger logger = LoggerFactory.getLogger(getClass());
@Test
void contextLoads() {
logger.trace("这是trace级别");
logger.debug("这是debug");
logger.info("这是信息");
logger.warn("这是warn");
logger.error("这是error");
}
}
日志框架需要一个门面和一个实现的具体原因
slf4就像我们的网页一样,前面只是点点点,但是底层调用了一些类的接口。
3、将其他的框架转到slf4j和logback
历史遗留:
各个框架都有自己默认的日志框架
spring:commons-logging
Hibernate:jboss-logging
底层使用的都是同的框架,所以我们要将这个框架整合起来使用日志功能的话就需要将
如果将这些日志框架统一?
原理:
我们不在直接调用原来的jcl之类的api,而是使用转换包的api,api名字没有改变
底层使用slf4j偷天换日,引用的对象已经改变了。
步骤:
将原来的框架排除掉,然后使用替换包替换
4、查看依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.2.6.RELEASE</version>
<scope>compile</scope>
</dependency>
我们这一看到这一个包是所有starter都依赖的。
我们可以看到像jul log4j都是使用的slf4j
总结:
- springboot底层也是使用slf4j和logback的方式
- 我们可以看到只有一个logback-core实现包
5、代码编写
Logger logger = LoggerFactory.getLogger(getClass());
@Test
void contextLoads() {
logger.trace("这是trace级别");
logger.debug("这是debug");
logger.info("这是信息");
logger.warn("这是warn");
logger.error("这是error");
}
如果不在配置文件配置logging.level的话,只默认输出info及以上的消息
logging.file.name=spring.log
默认在/的路径下生成名字
logging.file.path=/log/spring.log
这个是指定一个/log/下生成spring.log文件
logging.pattern.console
修改在控制台输出的格式(有默认格式):(这里我们使用这个)%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n
logging.pattern.file
和上面一样,但是是输出在file中的格式
6、springboot对logger的默认配置
里面有一个专门的logger包
包下面的logging包下有很多关于日志配置的文件,比如base.xml还有defaults.xml
还有一个配置类LoggingSystemProperties
这些配置的前缀和配置的名字就是我们可以在全局配置中进行设置的变量名。
里面定义的很多变量也被base.xml等等其他的文件使用。
里面定义了很多我们在xml中使用的变量,例如:
在官方有对log的格式有解释
7、自定义日志配置
我们自定义的日志配置文件,会根据名字而被不同框架识别,前面两种命名方式会被spring框架识别,后面两种命名方式则是会被日志框架识别。
就是如果我们需要使用某个特定的日志框架的配置,那么只需要在类路径下加入这种命名的配置文件即可。
spring的可以分多个环境配置:
<springProfile name="staging">
<!-- configuration to be enabled when the "staging" profile is active -->
可以指定某段配置在某个环境下有小
</springProfile>
<springProfile name="dev | staging">
<!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>
<springProfile name="!production">
<!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>
8、转换到其他的日志框架:
不使用logback,而是选择其他的日志实现的原理:和前面其他框架转slf4j一样,但是我们只需要把日志实现替换就可以,我们仍然使用slf4j门面
首先就需要将原来的logback实现给排除出去,然后倒入新的日志实现即可