• Spring Boot日志配置及输出


    1.日志框架有哪些?


    常见的日志框架有log4j、logback、log4j2。

    log4j这个日志框架显示是耳熟能详了,在Spring开发中是经常使用,但是据说log4j官方已经不再更新了,而且在性能上比logback、log4j2差了很多。

    logback是由log4j创始人设计的另外一个开源日志框架,logback相比之于log4j性能提升了10以上,初始化内存加载也更小了。作为的Spring Boot默认的日志框架肯定是有着不小的优势。

    log4j2晚于logback推出,官网介绍性能比logback高,但谁知道是不是王婆卖瓜自卖自夸,坊间流传,log4j2在很多思想理念上都是照抄logback,因此即便log4j2是Apache官方项目,Spring等许多框架项目没有将它纳入主流


    slf4j:simple log facade for java,译为简单日志门面。官方介绍为,SLF4J作为各种日志系统的简单Facade或抽象,允许最终用户在部署时插入所需的日志框架。

    总结:slf4j是通用的接口规范,log4j、logback、log4j2是具体实现的日志插件。

    Spring Boot 默认使用 SLF4J+Logback 记录日志,并提供了默认配置,即使我们不进行任何额外配,也可以使用 SLF4J+Logback 进行日志输出。

    2.日志级别


    几种常见的日志级别由低到高分为:TRACE < DEBUG < INFO < WARN < ERROR < FATAL。如何理解这个日志级别呢?很简单,如果项目中的日志级别设置为INFO,那么比它更低级别的日志信息就看不到了,即是TRACE、DEBUG日志将会不显示。

    3.日志如何使用以及输出

    在业务中肯定需要追溯日志,那么如何在自己的业务中输出日志呢?其实常用的有两种方式,下面一一介绍。

    第一种其实也是很早之前常用的一种方式,只需要在代码添加如下:

    private final Logger logger= LoggerFactory.getLogger(DemoApplicationTests.class);
    

    这种方式显然比较鸡肋,如果每个类中都添加一下岂不是很low。别着急,lombok为我们解决了这个难题。

    要想使用lombok,需要添加如下依赖:

    1. <dependency>
    2. <groupId>org.projectlombok</groupId>
    3. <artifactId>lombok</artifactId>
    4. </dependency>

    使用也是很简单,只需要在类上标注一个注解@Slf4j即可,如下:

    如何定制日志级别?

    Spring Boot中默认的日志级别是INFO,但是可以自己定制日志级别,如下:

    logging.level.root=DEBUG
    

     日志如何输出到文件中?

    Spring Boot中日志默认是输出到控制台的,但是在生产环境中显示不可行的,因此需要配置日志输出到日志文件中。

    其中有两个重要配置如下:

    1. logging.file.path:指定日志文件的路径

    2. logging.file.name:日志的文件名,默认为spring.log

    注意:官方文档说这两个属性不能同时配置,否则不生效,因此只需要配置一个即可。

    指定输出的文件为当前项目路径的logs文件下,默认生成的日志文件为spring.log,如下:

    1. logging:
    2. file:
    3. path: /logs

     日志文件中还有一些其他的属性,比如日志文件的最大size,保留几天的日志等等,因此可以自定义日志文件的配置文件

    Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置。因此只需要在src/resources文件夹下创建logback-spring.xml即可,Springboot在启动可直接扫描,配置文件内容如下:

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <configuration debug="false">
    3. <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    4. <property name="LOG_HOME" value="/logs"/>
    5. <!--控制台日志, 控制台输出 -->
    6. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    7. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    8. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%n是换行符-->
    9. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
    10. </encoder>
    11. </appender>
    12. <!--文件日志, 按照每天生成日志文件 -->
    13. <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    14. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    15. <!--日志文件输出的文件名-->
    16. <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}</FileNamePattern>
    17. <!--日志文件保留天数-->
    18. <MaxHistory>30</MaxHistory>
    19. </rollingPolicy>
    20. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    21. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
    22. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
    23. </encoder>
    24. <!--日志文件最大的大小-->
    25. <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
    26. <MaxFileSize>10MB</MaxFileSize>
    27. </triggeringPolicy>
    28. </appender>
    29. show parameters for hibernate sql 专为 Hibernate 定制
    30. <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />
    31. <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />
    32. <logger name="org.hibernate.SQL" level="DEBUG" />
    33. <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
    34. <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />
    35. <!--myibatis log configure-->
    36. <logger name="com.apache.ibatis" level="TRACE"/>
    37. <logger name="java.sql.Connection" level="DEBUG"/>
    38. <logger name="java.sql.Statement" level="DEBUG"/>
    39. <logger name="java.sql.PreparedStatement" level="DEBUG"/>
    40. <!-- 日志输出级别 -->
    41. <root level="DEBUG">
    42. <appender-ref ref="STDOUT" />
    43. <appender-ref ref="FILE"/>
    44. </root>
    45. </configuration>

  • 相关阅读:
    Lumiprobe染料 NHS 酯丨BDP FL NHS 酯研究
    复习单片机部分:1.开发板功能及使用介绍 2.51 单片机介绍 3.数字电路与 C 语言基础
    php webuploader 大文件上传带进度条
    并查集-合并集合
    力扣 关于pandas分组聚合的问题
    第二十章《Java Swing》第3节:布局管理器
    类和对象:初始化列表,静态成员,友元,内部类,匿名对象
    力扣每日一题2022-09-05中等题:寻找重复的子树
    [安卓APP毕业设计源码]精品基于Uniapp+SSM实现的植物介绍APP[包运行成功]
    ansible角色运行指定角色路径
  • 原文地址:https://blog.csdn.net/weixin_42672802/article/details/127903378