@Conditional
关于一些@Conditional注解的一些拓展注解

springboot与日志
1、常见框架
jul jcl jboss-logging logback log4j log4j2 slf4j
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Wo0n0c8-1590908923445)(C:\Users\yu\AppData\Roaming\Typora\typora-user-images\1586144347060.png)]](https://i-blog.csdnimg.cn/blog_migrate/c601f636338d8a51481c009d81f5306d.png)
所有一般是选一个门面,一个具体实现。一个具体的实现推荐使用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
底层使用的都是同的框架,所以我们要将这个框架整合起来使用日志功能的话就需要将
如果将这些日志框架统一?
原理:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o59uTClv-1590908923451)(C:\Users\yu\AppData\Roaming\Typora\typora-user-images\1586145019472.png)]](https://i-blog.csdnimg.cn/blog_migrate/b116d4e8d2bada29abf18d312a117a80.png)
我们不在直接调用原来的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
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MKF37nXy-1590908923456)(C:\Users\yu\AppData\Roaming\Typora\typora-user-images\1586149708935.png)]](https://i-blog.csdnimg.cn/blog_migrate/197648be0ede6feead42e15b5081a280.png)
logging.pattern.file
和上面一样,但是是输出在file中的格式
6、springboot对logger的默认配置
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yvh5nWEk-1590908923457)(C:\Users\yu\AppData\Roaming\Typora\typora-user-images\1586149878606.png)]](https://i-blog.csdnimg.cn/blog_migrate/a5be08a18351aeae0ad2742e56dce23e.png)
里面有一个专门的logger包
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TXi9nd8J-1590908923458)(C:\Users\yu\AppData\Roaming\Typora\typora-user-images\1586150091780.png)]](https://i-blog.csdnimg.cn/blog_migrate/fa84c4af82c39f4a96fdead424c178f7.png)
包下面的logging包下有很多关于日志配置的文件,比如base.xml还有defaults.xml

还有一个配置类LoggingSystemProperties
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OLJlE6lJ-1590908923459)(C:\Users\yu\AppData\Roaming\Typora\typora-user-images\1586183377519.png)]](https://i-blog.csdnimg.cn/blog_migrate/01e4d833318167bce32e8bd469d249b8.png)
这些配置的前缀和配置的名字就是我们可以在全局配置中进行设置的变量名。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hkNSFUEe-1590908923460)(C:\Users\yu\AppData\Roaming\Typora\typora-user-images\1586183606240.png)]](https://i-blog.csdnimg.cn/blog_migrate/98a6a767f8f12d0b4a5d91d3171c92b1.png)

里面定义的很多变量也被base.xml等等其他的文件使用。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eNjGueXZ-1590908923461)(C:\Users\yu\AppData\Roaming\Typora\typora-user-images\1586183717664.png)]](https://i-blog.csdnimg.cn/blog_migrate/a20588cfa5ce2e05de2b9e5f22384505.png)
里面定义了很多我们在xml中使用的变量,例如:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gLOClG8O-1590908923462)(C:\Users\yu\AppData\Roaming\Typora\typora-user-images\1586183693835.png)]](https://i-blog.csdnimg.cn/blog_migrate/f367fc40f2048a2aa44ebf0e1ad34dad.png)
在官方有对log的格式有解释

7、自定义日志配置
我们自定义的日志配置文件,会根据名字而被不同框架识别,前面两种命名方式会被spring框架识别,后面两种命名方式则是会被日志框架识别。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mrDcEery-1590908923464)(C:\Users\yu\AppData\Roaming\Typora\typora-user-images\1586184131240.png)]](https://i-blog.csdnimg.cn/blog_migrate/31d58e83949152d56bc07c529b0c39fe.png)
就是如果我们需要使用某个特定的日志框架的配置,那么只需要在类路径下加入这种命名的配置文件即可。
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门面
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9Xi7RAIZ-1590908923464)(C:\Users\yu\AppData\Roaming\Typora\typora-user-images\1586184752641.png)]](https://i-blog.csdnimg.cn/blog_migrate/2604ab9b3cedd78069f627b4c3a49726.png)
首先就需要将原来的logback实现给排除出去,然后倒入新的日志实现即可

本文详细介绍了SpringBoot中日志框架的选择与配置,包括SLF4J和Logback的使用,以及如何将其他日志框架转换为SLF4J和Logback。探讨了日志级别、自定义配置和环境配置的细节。
3269

被折叠的 条评论
为什么被折叠?



