11.springboot与日志

市场上的日志框架:
JUL,JCL,Jboss-logging,logback,log4j,log4j2,slf4j...
日志门面(日志的抽象层:相当于接口)
日志实现(接口的实现)
JCL(jakarta Commons loggging)
slf4j(simple logging facade for java)
jboss-logging
log4j
jul
lo4j2
logback
左边选择一个抽象层,右边选择一个实现!
日志门面选择:SLF4J
日志实现:LogBack
 
springBoot:底层是spring框架,spring框架默认使用的是JCL
springboot选用的是SLF4J和LogBack

2.SLF4J的使用

1.如何在系统中使用SLF4J的日志框架呢

以后在开发时,日志记录方法的调用,不应该直接调用日志的实现类,而是应该调用日志抽象层里面的方法

遗留问题

springboot(默认底层使用的是:slf4j和logback)
spring(默认底层使用的是comming-logging)
hibernate(默认底层使用的是 jboss-logging)
等等
那如何做到日志的统一呢??和springboot一样使用slf4j进行日志输出呢!
如何让系统中所有的日志都使用slf4j呢
做法:
1.将其他系统中的日志先排除出去
2.用中间包替换原有的日志框架
3.我们导入slf4j的实现
总结:
1》springboot底层也是使用slf4j和logback的方式进行日志记录
2》springboot也把其他的日志都替换成了slf4j
3》中间替换包?
4》如果我们要引入其他框架?一定要把这个框架的默认日志依赖移除掉,导入中间转换包,最终日志以slf4j和logback的形式进行统一
例如:spring框架用的是commons-logging的日志框架,springboot底层就是spring,他在导入spring依赖时:
 

日志的使用:

Logger logger = LoggerFactory.getLogger(getClass());--->这里的LoggerFactoryjar包必须是slf4j的
@Test
public void  test0(){
    /**
     * 日志级别从低祷告: trace<debug<info<warm<erro
     * 可以调整日志的输出级别:日志就只会在这个级别以后的高级别生效
     */
    logger.trace("这是trace日志..");
    logger.debug("这时debug日志...");
    //springboot默认给我们使用的是info(info以及更高级别)级别的,没有指定级别的就是用springboot默认规定的级别:又称root级别
    logger.info("这这是info日志...");
    logger.warn("这是warm日志..");
    logger.error("这是erro日志...");
}
输出:发现其只输出了info以及更高日志-->springboot的默认输出级别!
    2020-09-20 11:35:15.530  INFO 11648 --- [           main] cn.com.wmd.SpringBootTest                : 这这是info日志...
    2020-09-20 11:35:15.530  WARN 11648 --- [           main] cn.com.wmd.SpringBootTest                : 这是warm日志..
    2020-09-20 11:35:15.538 ERROR 11648 --- [           main] cn.com.wmd.SpringBootTest                : 这是erro日志...
    
这个默认的输出级别在application.properties可做更改:logging.level.包=日志级别---->意思是在包(cn)下的所有类使用的日志级别均是trace
    logging.level.cn=trace
    
这时输出:发现其输出了全部级别的日志!!
    2020-09-20 11:40:46.392 TRACE 14656 --- [           main] cn.com.wmd.SpringBootTest                : 这是trace日志..
    2020-09-20 11:40:46.392 DEBUG 14656 --- [           main] cn.com.wmd.SpringBootTest                : 这时debug日志...
    2020-09-20 11:40:46.392  INFO 14656 --- [           main] cn.com.wmd.SpringBootTest                : 这这是info日志...
    2020-09-20 11:40:46.392  WARN 14656 --- [           main] cn.com.wmd.SpringBootTest                : 这是warm日志..
    2020-09-20 11:40:46.398 ERROR 14656 --- [           main] cn.com.wmd.SpringBootTest                : 这是erro日志...
logging.path和logging.file的区别
logging.file
logging.path
示例
描述
不指定
不指定
 
只在控制台输出
指定文件名
不指定
my.log
输出日志到my.log
不指定
指定目录
/var/log
输出到指定目录的spring.log文件中

使用示例:

在application.properties配置文件中配置:
    #在当前磁盘的根目录下常见spring文件夹和里面的log文件夹;使用spring.log作为默认的配置文件
    logging.path=/spring/log
    
    #不指定路径会在当前项目下生成springboot.log日志
    #可以指定完整的路径
    logging.file=G:/springboot.log
    
    #在控制台输出的日志格式
    logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
    
    #指定文件中日志输出的格式
    logging.pattern.file=%d{yyyy-MM-dd}===[%thread]===%-5level===%logger{50}===%msg%n
    
日志的输出格式:
    %d表示日期时间
    %thread表示线程名
    %-5level:级别从左显示5个字符宽度
    %logger{50} 表示logger名称做i长50个字符,否则按照句点分割
    %msg:日志消息
    %n是换行符

发现控制台输出格式:
    2020-09-20 [main] TRACE cn.com.wmd.SpringBootTest - 这是trace日志..
    2020-09-20 [main] DEBUG cn.com.wmd.SpringBootTest - 这时debug日志...
    2020-09-20 [main] INFO  cn.com.wmd.SpringBootTest - 这这是info日志...
    2020-09-20 [main] WARN  cn.com.wmd.SpringBootTest - 这是warm日志..
    2020-09-20 [main] ERROR cn.com.wmd.SpringBootTest - 这是erro日志...
文件输出格式:
    2020-09-20===[main]===TRACE===cn.com.wmd.SpringBootTest===这是trace日志..
    2020-09-20===[main]===DEBUG===cn.com.wmd.SpringBootTest===这时debug日志...
    2020-09-20===[main]===INFO ===cn.com.wmd.SpringBootTest===这这是info日志...
    2020-09-20===[main]===WARN ===cn.com.wmd.SpringBootTest===这是warm日志..
    2020-09-20===[main]===ERROR===cn.com.wmd.SpringBootTest===这是erro日志...
    
2.指定日志文件的配置
给类路径下放上每个日志框架自己的配置文件即可;springboot就不会使用自己的默认配置了
日志框架
配置文件名称
Logback
logback-spring.xml ,logback-spring.groovy, logback.xml, logback.groovy
log4j2
log4j2-spring.xml, log4j.xml
JDK(Java Util Logging)
logging.properties
logback.xml:直接被日志框架识别到了
logback-spring.xml:日志框架就不会直接加载日志的配置项,由spring-boot解析日志配置,可以使用springboot的告警profile共功能

<springProfile name="staging">
    可以指定某段配置只在某个环境下生效
</springProfile>

 

posted @ 2022-05-10 21:36  努力的达子  阅读(60)  评论(0编辑  收藏  举报