springboot2.0日志详解-logback,log4j2,log4j

以你之姓@ 2021-09-28 23:16 611阅读 0赞

优先级从高到低分别是 ERROR、WARN、INFO、DEBUG

在说springboot默认的日志框架之前,先说下目前市面上的一些日志框架

市面上的日志框架:JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j…

JCL(Jakarta Commons Logging) :spring 底层所使用的日志框架

JUL(java.util.logging) :java提供的日志框架

Jboss-logging :就是jboss提供的日志框架(hibernate)

logback :springboot默认使用的框架

log4j :跟logback 同一个人写的日志框架

log4j2:是谷歌的一个日志框架

slf4j(Simple Logging Facade for Java ):简单的日志框架,也是logback ,log4j 的作者写的,主要是目前日志的抽象层

面对抽象层编程,我们主要使用的slf4j,对应的实现有logback,log4j,log4j2

在slf4j的官网中,有张图,告诉我们,如何引用日志框架

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI4NDEwMjgz_size_16_color_FFFFFF_t_70

图上,可以看到,我们使用不同的日志框架,都可以使用slf4j作为日志的抽象层,来做日志的收集,而不需要具体关注日志的实现,slf4j也都做了很好的适配,其中标红的一部分,就是slf4j做的一些适配;

具体做日志适配的过程,官网上,也给了另外一个图

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI4NDEwMjgz_size_16_color_FFFFFF_t_70 1

我们以标注的部分为例(JCL(Jakarta Commons Logging) :spring 底层所使用的日志框架)

spring的底层使用的JCL日志框架,springboot使用的logback,这两个日志框架,要做兼容

1:首先要排除掉JCL的日志框架,

  1. <dependency>
  2. <groupId>org.springframework.ws</groupId>
  3. <artifactId>spring-ws-core</artifactId>
  4. <version>3.0.6.RELEASE</version>
  5. <scope>compile</scope>
  6. <exclusions>
  7. <exclusion>
  8. <artifactId>commons-logging</artifactId>
  9. <groupId>commons-logging</groupId>
  10. </exclusion>
  11. </exclusions>
  12. <optional>true</optional>
  13. </dependency>

2:然后引入logback的日志实现,也就是springboot日志中,引入的jar

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-logging</artifactId>
  4. </dependency>

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI4NDEwMjgz_size_16_color_FFFFFF_t_70 2

3:然后引入中间替换包,来替换掉spring的底层的日志框架,上图所示的jul-to-slf4j.jar

至此,日志就替换完成了,后面就是日志文件的一些具体配置了,详细参考springboot的官网26章

https://docs.spring.io/spring-boot/docs/2.1.5.RELEASE/reference/htmlsingle/#boot-features-logging

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI4NDEwMjgz_size_16_color_FFFFFF_t_70 3

日志输出格式:
%d表示日期时间,
%thread表示线程名,
%-5level:级别从左显示5个字符宽度
%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
%msg:日志消息,
%n是换行符

例如: %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

  1. logging.level.com.badger=debug
  2. #logging.path=
  3. # 不指定路径在当前项目下生成springboot.log日志
  4. # 可以指定完整的路径;
  5. #logging.file=G:/springboot.log
  6. # 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件
  7. logging.path=/spring/log
  8. # 在控制台输出的日志的格式
  9. logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
  10. # 指定文件中日志输出的格式
  11. logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n





























logging.file logging.path Example Description
(none) (none)   只在控制台输出
指定文件名 (none) my.log 输出日志到my.log文件
(none) 指定目录 /var/log 输出到指定目录的 spring.log 文件中

也可以在xml文件中,指定日志文件,不同的日志框架,有对应的不同的日志文件的名称






















Logging System Customization
Logback logback-spring.xml, logback-spring.groovy, logback.xml or logback.groovy
Log4j2 log4j2-spring.xml or log4j2.xml
JUL (Java Util Logging) logging.properties

我们使用springboot默认的Logback日志,我直接给一个我经常使用的,供大家参考

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration scan="true" scanPeriod="10 seconds">
  3. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  4. <encoder>
  5. <Pattern>[%d %level]%logger{50}>>> %msg%n</Pattern>
  6. </encoder>
  7. </appender>
  8. <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  9. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  10. <level>DEBUG</level>
  11. <onMatch>ACCEPT</onMatch>
  12. <onMismatch>DENY</onMismatch>
  13. </filter>
  14. <File>logs/debug.log</File>
  15. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  16. <fileNamePattern>logs/debug-%d{yyyyMMdd}.log.%i</fileNamePattern>
  17. <timeBasedFileNamingAndTriggeringPolicy
  18. class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  19. <maxFileSize>50MB</maxFileSize>
  20. </timeBasedFileNamingAndTriggeringPolicy>
  21. <maxHistory>10</maxHistory>
  22. </rollingPolicy>
  23. <layout class="ch.qos.logback.classic.PatternLayout">
  24. <Pattern>[%d %level]%logger{36}>>> %msg%n</Pattern>
  25. </layout>
  26. </appender>
  27. <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  28. <File>logs/info.log</File>
  29. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  30. <level>INFO</level>
  31. <onMatch>ACCEPT</onMatch>
  32. <onMismatch>DENY</onMismatch>
  33. </filter>
  34. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  35. <fileNamePattern>logs/info-%d{yyyyMMdd}.log.%i</fileNamePattern>
  36. <timeBasedFileNamingAndTriggeringPolicy
  37. class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  38. <maxFileSize>20MB</maxFileSize>
  39. </timeBasedFileNamingAndTriggeringPolicy>
  40. <maxHistory>10</maxHistory>
  41. </rollingPolicy>
  42. <layout class="ch.qos.logback.classic.PatternLayout">
  43. <Pattern>[%d %level]%logger{50}>>> %msg%n</Pattern>
  44. </layout>
  45. </appender>
  46. <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  47. <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  48. <level>WARN</level>
  49. </filter>
  50. <File>logs/error.log</File>
  51. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  52. <fileNamePattern>logs/error-%d{yyyyMMdd}.log.%i</fileNamePattern>
  53. <timeBasedFileNamingAndTriggeringPolicy
  54. class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  55. <maxFileSize>20MB</maxFileSize>
  56. </timeBasedFileNamingAndTriggeringPolicy>
  57. <maxHistory>10</maxHistory>
  58. </rollingPolicy>
  59. <layout class="ch.qos.logback.classic.PatternLayout">
  60. <Pattern>[%d %level]%logger{50}>>> %msg%n</Pattern>
  61. </layout>
  62. </appender>
  63. <logger name="com.badger" level="DEBUG" />
  64. <logger name="com.alibaba.druid" level="INFO" />
  65. <logger name="org.apache.ibatis" level="INFO" />
  66. <logger name="org.mybatis.spring" level="INFO" />
  67. <logger name="org.hibernate.validator" level="INFO" />
  68. <logger name="org.springframework" level="INFO"></logger>
  69. <root level="INFO">
  70. <appender-ref ref="STDOUT" />
  71. <appender-ref ref="DEBUG_FILE" />
  72. <appender-ref ref="INFO_FILE" />
  73. <appender-ref ref="ERROR_FILE" />
  74. </root>
  75. </configuration>

需要说明下:

1:如果日志文件的名字logback-spring.xml ,那么可以使用这个,表示当前环境下生效

  1. <springProfile name="dev">
  2. <!-- configuration to be enabled when the "staging" profile is active -->
  3. 可以指定某段配置只在某个环境下生效
  4. </springProfile>

2:日志的过滤器

  1. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  2. <level>DEBUG</level>
  3. <onMatch>ACCEPT</onMatch>
  4. <onMismatch>DENY</onMismatch>
  5. </filter>

有两种:ch.qos.logback.classic.filter.LevelFilter和ch.qos.logback.classic.filter.ThresholdFilter

LevelFilter:是级别过滤器,表示只要当前的级别的

ThresholdFilter:是阈值过滤器,表示只要xxx级别一下的,例如配置了info级别,那么拦截的日志就会是

ERROR、WARN、INFO、DEBUG 中的 ERROR、WARN、INFO

onMatch:拿到对应级别的处理机制

onMismatch:不是这个级别的日志的处理机制

对应的就是这个枚举类ch.qos.logback.core.spi.FilterReply

  1. public enum FilterReply {
  2. DENY, NEUTRAL, ACCEPT;
  3. }

log4j,log4j2的使用

通过上面的说明,大家也都该熟悉怎么使用了,步骤就简单很多了,直接排除springboot的日志,切换到对应的日志框架就可以了,如下:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. <exclusions>
  5. <exclusion>
  6. <artifactId>spring-boot-starter-logging</artifactId>
  7. <groupId>org.springframework.boot</groupId>
  8. </exclusion>
  9. </exclusions>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.springframework.boot</groupId>
  13. <artifactId>spring-boot-starter-log4j2</artifactId>
  14. </dependency>

发表评论

表情:
评论列表 (有 0 条评论,611人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Log4jLog4j2日志记录详解

    > 一个完整的项目里,日志是必不可少的,也是很重要的一部分。程序从开发、测试、维护、运行等环节,都需要想控制台等输出大量的信息,如果程序出了问题,那么这些信息能快速的反映出问题

    相关 log4j日志详解

    [Log4j使用指南][Log4j] 1         概述 本文档是针对Log4j日志工具的使用指南。包括:日志介绍、日志工具介绍、Log4j基本使用、Log4j的高级

    相关 log4j日志详解

    [Log4j使用指南][Log4j] 1         概述 本文档是针对Log4j日志工具的使用指南。包括:日志介绍、日志工具介绍、Log4j基本使用、Log4j的高级