Java提供了丰富的日志框架,尝尝让我们眼花缭乱,下面整理了他们之间的关系图:

    image.png

    SpringBoot 下提供了多种日志框架,接口层次主要是slf4j & apache common-logging 具体的实现主要有log4j & logback等,在SpringBoot页面,我们可以在resource目录下创建 logback-spring.xml 配置文件来标注日志的行为。

    1. <?xml version="1.0" encoding="UTF-8" ?>
    2. <configuration>
    3. <!-- 导入基本的默认配置-->
    4. <include resource="org/springframework/boot/logging/logback/base.xml"/>
    5. <!-- 通用等级,按照包名配置,输出的等级为ERROR-->
    6. <logger name="com.zhoutao123.spring.springboot" level="ERROR"/>
    7. <!-- 根据环境来定义,优先级比上面的配置方式等级高-->
    8. <!-- 默认的actioveProfile-->
    9. <springProfile name="default">
    10. <logger name="com.zhoutao123.spring.springboot" level="DEBUG"/>
    11. </springProfile>
    12. <!--dev环境的配置-->
    13. <springProfile name="dev">
    14. <!--配置日志的环境变量-->
    15. <property name="APP_NAME" value="TEST"/>
    16. <property name="PATH" value="/tmp/log"/>
    17. <property name="FILE_LOG" value="${PATH}/${APP_NAME}/log.log"/>
    18. <!-- Appender 配置-->
    19. <appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="APP">
    20. <!--配置日志目录-->
    21. <file>${FILE_LOG}</file>
    22. <!--配置日志文件的编码以及格式-->
    23. <encoder>
    24. <charset>utf8</charset>
    25. <pattern><![CDATA[
    26. %d{yyyy年MM月dd日 HH:mm:ss.SSS} 线程:[%thread] %X{TRACE_ID} %X{USER_ID} %-5level %logger.%M - %msg%n
    27. ]]></pattern>
    28. </encoder>
    29. <!-- 规则策略-->
    30. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    31. <!--文件的保存位置信息-->
    32. <fileNamePattern>${PATH}/${APP_NAME}/%d{yyyy-MM-dd}.%i.log</fileNamePattern>
    33. <!--文件的最大大小,保存历史文件的个数,总体文件大小限制-->
    34. <maxFileSize>5MB</maxFileSize>
    35. <maxHistory>100</maxHistory>
    36. <totalSizeCap>20GB</totalSizeCap>
    37. </rollingPolicy>
    38. </appender>
    39. <!--配置日志输出信息,输出等级为TRACE,输出到APP策略文件-->
    40. <logger name="com.zhoutao123.spring.springboot" level="TRACE">
    41. <appender-ref ref="APP"/>
    42. </logger>
    43. </springProfile>
    44. <springProfile name="prod">
    45. <logger name="com.zhoutao123.spring.springboot" level="WARN"/>
    46. </springProfile>
    47. </configuration>

    由于这里设置的是默认的activeProfile=dev,所以需要在application.yml 中设置激活的actioveProfile=dev,同时需要在resource目录创建 application-dev.xml 文件,内容为空

    1. spring:
    2. profiles:
    3. active: dev

    在项目中添加日志输出点

    1. package com.zhoutao123.spring.springboot;
    2. @SpringBootApplication
    3. public class Application {
    4. public static final Logger log = LoggerFactory.getLogger(Application.class);
    5. public static void main(String[] args) {
    6. SpringApplication.run(Application.class, args);
    7. }
    8. @PostConstruct
    9. private void printLog(){
    10. log.trace("这是trace级别日志");
    11. log.debug("这是debug级别日志");
    12. log.info("这是info级别日志");
    13. log.warn("这是warn级别日志");
    14. log.error("这是error级别日志");
    15. }
    16. }

    然后在日志中文件就可以看到这些日志文件

    1. # 查看目录结构 & 查看日志内容
    2. $ tree -h -R 'log' && cat ./log/TEST/log.log
    3. log
    4. └── [ 96] TEST
    5. └── [2.8K] log.log
    6. 1 directory, 1 file
    7. 20200503 09:55:12.672 线程:[main] INFO com.zhoutao123.spring.springboot.Application.logStarting - Starting Application on zhoutaodeMBP.lan with PID 6734 (/Users/zhoutao/workspace/MyGithub/SpringBoot/build/classes/java/main started by zhoutao in /Users/zhoutao/workspace/MyGithub/SpringBoot)
    8. 20200503 09:55:12.676 线程:[main] DEBUG com.zhoutao123.spring.springboot.Application.logStarting - Running with Spring Boot v2.2.6.RELEASE, Spring v5.2.5.RELEASE
    9. 20200503 09:55:12.676 线程:[main] INFO com.zhoutao123.spring.springboot.Application.logStartupProfileInfo - The following profiles are active: dev
    10. 20200503 09:55:13.290 线程:[main] TRACE com.zhoutao123.spring.springboot.Application.printLog - 这是trace级别日志
    11. 20200503 09:55:13.291 线程:[main] DEBUG com.zhoutao123.spring.springboot.Application.printLog - 这是debug级别日志
    12. 20200503 09:55:13.291 线程:[main] INFO com.zhoutao123.spring.springboot.Application.printLog - 这是info级别日志
    13. 20200503 09:55:13.291 线程:[main] WARN com.zhoutao123.spring.springboot.Application.printLog - 这是warn级别日志
    14. 20200503 09:55:13.291 线程:[main] ERROR com.zhoutao123.spring.springboot.Application.printLog - 这是error级别日志
    15. 20200503 09:55:13.485 线程:[main] INFO com.zhoutao123.spring.springboot.Application.logStarted - Started Application in 1.157 seconds (JVM running for 1.546)