Java SpringBoot 日志
SpringBoot日志配置:
SpringBoot默认日志是打印再console中的,不会保存在文件中。项目上线肯定要保存日志用于分析的。

一、使用xml配置日志保存(并不需要pom配置slf4j依赖,starter里面已经配置了依赖了)

1、在项目的resources目录下创建一个【logback-spring.xml】日志配置文件

名称只要是一 logback开头就行,测试使用log.xml并不会生成日志。合法名称:logback.xml 、logback-spring.xml
备注:要配置logback-spring.xml,SpringBoot会默认加载此文件,为什么不配置logback.xml,因为logback.xml会先application.properties加载,而logback-spring.xml会后于application.properties加载,这样在application.properties文中设置日志文件名称和文件路径才能生效

2、编写xml文件内容

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration scan="true" scanPeriod="60 seconds" debug="false">
  3. <contextName>logback</contextName>
  4. <!--输出到控制台-->
  5. <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
  6. <encoder>
  7. <!--<pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>-->
  8. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
  9. <!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} -%5p ${PID:-} [%15.15t] %-30.30C{1.} : %m%n</pattern>-->
  10. </encoder>
  11. </appender>
  12. <!--按天生成日志-->
  13. <appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
  14. <Prudent>true</Prudent>
  15. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  16. <FileNamePattern>
  17. poslog/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.log
  18. </FileNamePattern>
  19. <maxHistory>7</maxHistory>
  20. </rollingPolicy>
  21. <layout class="ch.qos.logback.classic.PatternLayout">
  22. <Pattern>
  23. %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n
  24. </Pattern>
  25. </layout>
  26. </appender>
  27. <root level="INFO">
  28. <appender-ref ref="console" />
  29. <appender-ref ref="logFile" />
  30. </root>
  31. </configuration>

上述配置的编码中,对应符号的含义如下

  • %d{HH:mm:ss.SSS}——日志输出时间
  • %thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用
  • %-5level——日志级别,并且使用5个字符靠左对齐
  • %logger ——日志输出者的名字
  • %msg——日志消息
  • %n——平台的换行符

    3、编写打印日志

    ```java private Logger logger = LoggerFactory.getLogger(TestController.class);

logger.info(“name = “ + name + “ || views = “ + views);// 使用

  1. <a name="zz0hq"></a>
  2. #### 4、启动测试
  3. 在当前文件夹下会创建一个【poslog/2020-10/22】的文件夹,里面会按天生成日志:【2020-10-22.log】,例如:
  4. ```java
  5. 2020-10-22 16:38 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 8088 (http)
  6. 2020-10-22 16:38 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8088"]
  7. 2020-10-22 16:38 [main] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat]
  8. 2020-10-22 16:38 [main] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.38]
  9. 2020-10-22 16:38 [main] INFO org.apache.catalina.core.AprLifecycleListener - Loaded Apache Tomcat Native library [1.2.23] using APR version [1.7.0].
  10. 2020-10-22 16:38 [main] INFO org.apache.catalina.core.AprLifecycleListener - APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
  11. 2020-10-22 16:38 [main] INFO org.apache.catalina.core.AprLifecycleListener - APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
  12. 2020-10-22 16:38 [main] INFO org.apache.catalina.core.AprLifecycleListener - OpenSSL successfully initialized [OpenSSL 1.1.1c 28 May 2019]
  13. 2020-10-22 16:38 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
  14. 2020-10-22 16:38 [main] INFO org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1422 ms
  15. 2020-10-22 16:38 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor - Initializing ExecutorService 'applicationTaskExecutor'
  16. 2020-10-22 16:38 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8088"]
  17. 2020-10-22 16:38 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 8088 (http) with context path ''
  18. 2020-10-22 16:38 [main] INFO com.example.demo.DockerComposeTestApplication - Started DockerComposeTestApplication in 2.841 seconds (JVM running for 3.257)

备注:发现使用这个默认不用配置pom依赖,最新的spring-boot-starter-web中已经集成了。
总结:启动一个项目,直接将logback-spring.xml文件复制到resources目录下就可以实现日志文件记录。非常方便。

二、进阶配置

分类logback.xml配置:
日志配置到d盘了

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <!-- 日志存放路径 -->
  4. <property name="log.path" value="d:/logback" />
  5. <!-- 日志输出格式 -->
  6. <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
  7. <!-- 控制台输出 -->
  8. <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
  9. <encoder>
  10. <pattern>${log.pattern}</pattern>
  11. </encoder>
  12. </appender>
  13. <!-- 系统日志输出 -->
  14. <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
  15. <file>${log.path}/sys-info.log</file>
  16. <!-- 循环政策:基于时间创建日志文件 -->
  17. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  18. <!-- 日志文件名格式 -->
  19. <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
  20. <!-- 日志最大的历史 60天 -->
  21. <maxHistory>60</maxHistory>
  22. </rollingPolicy>
  23. <encoder>
  24. <pattern>${log.pattern}</pattern>
  25. </encoder>
  26. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  27. <!-- 过滤的级别 只会打印debug不会有info日志-->
  28. <!-- <level>DEBUG</level>-->
  29. <!-- 匹配时的操作:接收(记录) -->
  30. <onMatch>ACCEPT</onMatch>
  31. <!-- 不匹配时的操作:拒绝(不记录) -->
  32. <onMismatch>DENY</onMismatch>
  33. </filter>
  34. </appender>
  35. <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
  36. <file>${log.path}/sys-error.log</file>
  37. <!-- 循环政策:基于时间创建日志文件 -->
  38. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  39. <!-- 日志文件名格式 -->
  40. <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
  41. <!-- 日志最大的历史 60天 -->
  42. <maxHistory>60</maxHistory>
  43. </rollingPolicy>
  44. <encoder>
  45. <pattern>${log.pattern}</pattern>
  46. </encoder>
  47. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  48. <!-- 过滤的级别 -->
  49. <level>ERROR</level>
  50. <!-- 匹配时的操作:接收(记录) -->
  51. <onMatch>ACCEPT</onMatch>
  52. <!-- 不匹配时的操作:拒绝(不记录) -->
  53. <onMismatch>DENY</onMismatch>
  54. </filter>
  55. </appender>
  56. <!-- 用户访问日志输出 -->
  57. <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
  58. <file>${log.path}/sys-user.log</file>
  59. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  60. <!-- 按天回滚 daily -->
  61. <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern>
  62. <!-- 日志最大的历史 60天 -->
  63. <maxHistory>60</maxHistory>
  64. </rollingPolicy>
  65. <encoder>
  66. <pattern>${log.pattern}</pattern>
  67. </encoder>
  68. </appender>
  69. <!-- 系统模块日志级别控制 -->
  70. <logger name="com.example" level="debug" />
  71. <!-- Spring日志级别控制 -->
  72. <logger name="org.springframework" level="warn" />
  73. <root level="info">
  74. <appender-ref ref="console" />
  75. </root>
  76. <!--系统操作日志-->
  77. <root level="info">
  78. <appender-ref ref="file_info" />
  79. <appender-ref ref="file_error" />
  80. </root>
  81. <!--系统用户操作日志-->
  82. <logger name="sys-user" level="info">
  83. <appender-ref ref="sys-user"/>
  84. </logger>
  85. </configuration>

还可以在application.yml中配置

  1. # 日志配置
  2. logging:
  3. level:
  4. com.example: info
  5. org.springframework: warn

配置info就只有info以上日志才会输出
如果配置 com.example: debug ,那么项目com.example包里面debug以上的日志也会输出。