• SpringBoot系列(12):SpringBoot集成log4j2日志配置


    最近项目上有使用到log4j2日志模板配置,本文简单总结一下之前的学习笔记,如有纰漏之处,请批评指正。

    1. log4j2日志依赖

    使用log4j2日志模板时,需要引入相关依赖,下边的两种依赖方式均可。

    1.1 使用sl4j依赖时

    1. <properties>
    2. <spring-boot.version>2.6.13spring-boot.version>
    3. <log4j2.version>2.18.0log4j2.version>
    4. properties>
    5. <dependencies>
    6. <dependency>
    7. <groupId>org.springframework.bootgroupId>
    8. <artifactId>spring-boot-starter-webartifactId>
    9. <version>${spring-boot.version}version>
    10. dependency>
    11. <dependency>
    12. <groupId>org.slf4jgroupId>
    13. <artifactId>slf4j-apiartifactId>
    14. <version>1.7.30version>
    15. dependency>
    16. <dependency>
    17. <groupId>org.apache.logging.log4jgroupId>
    18. <artifactId>log4j-coreartifactId>
    19. <version>${log4j2.version}version>
    20. dependency>
    21. <dependency>
    22. <groupId>org.apache.logging.log4jgroupId>
    23. <artifactId>log4j-apiartifactId>
    24. <version>${log4j2.version}version>
    25. dependency>
    26. <dependency>
    27. <groupId>org.apache.logging.log4jgroupId>
    28. <artifactId>log4j-slf4j-implartifactId>
    29. <version>${log4j2.version}version>
    30. <exclusions>
    31. <exclusion>
    32. <groupId>org.slf4jgroupId>
    33. <artifactId>slf4j-apiartifactId>
    34. exclusion>
    35. exclusions>
    36. dependency>
    • 使用sl4j依赖时,需要在打印日志的类中声明一个日志对象处理
    1. private static final Logger LOGGER = LoggerFactory.getLogger(xxxxxx.class);
    2. // 方法内
    3. LOGGER .info("application started");

     这种方式需要配置很多次,略繁琐。可以类上使用注解@sl4j来代替

    1.2 使用lombok依赖

    如果不想像上边那样写一堆sl4f依赖,可以直接使用lombok依赖,作用是相同的。仅仅在需要打印日志的类上配置上注解@sl4j即可。

    1. <dependency>
    2. <groupId>org.projectlombokgroupId>
    3. <artifactId>lombokartifactId>
    4. <version>1.18.24version>
    5. dependency>
    • 在需要打印日志的方法内直接使用
    1. // 方法内
    2. log.info("application started");

     1.3 小结

    上边两种配置方式,原理雷同,看实际项目需要和个人喜好使用即可。


    2. log4j2.xml日志模板配置

    1. "1.0" encoding="UTF-8"?>
    2. <configuration status="OFF">
    3. <properties>
    4. <property name="LOG_LEVEL">INFOproperty>
    5. <property name="APP_NAME" value="spring-mvc-log"/>
    6. <property name="LOG_HOME">./logsproperty>
    7. <property name="LOG_MAX_HISTORY" value="10d"/>
    8. <property name="LOG_MAX_FILE_SIZE" value="10 MB"/>
    9. <property name="LOG_TOTAL_NUMBER_DAILY" value="10"/>
    10. <property name="ARCHIVE_FILE_SUFFIX" value="zip"/>
    11. <property name="LOG_FILE_NAME" value="${LOG_HOME}/${APP_NAME}"/>
    12. <property name="FILE_NAME_PATTERN" value="${LOG_HOME}/${APP_NAME}.%d{yyyy-MM-dd}"/>
    13. <property name="ENCODER_PATTERN_CONSOLE">%blue{%d{yyyy-MM-dd HH:mm:ss.SSS}} | %highlight{%-5level}{ERROR=Bright RED, WARN=Bright Yellow, INFO=Bright Green, DEBUG=Bright Cyan, TRACE=Bright White} | %yellow{%t} | %cyan{%l} >>>>> %white{%msg%n}property>
    14. <property name="ENCODER_PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} | %-5level | %t | %c{1.} >>>>> %msg%nproperty>
    15. properties>
    16. <Appenders>
    17. <Console name="Console" target="SYSTEM_OUT">
    18. <PatternLayout pattern="${ENCODER_PATTERN_CONSOLE}" />
    19. Console>
    20. <RollingFile name="RollingFileAll" fileName="${LOG_FILE_NAME}.ALL.log" filePattern="${FILE_NAME_PATTERN}.ALL.%i.log.${ARCHIVE_FILE_SUFFIX}">
    21. <ThresholdFilter level="${LOG_LEVEL}" onMatch="ACCEPT" onMismatch="DENY" />
    22. <PatternLayout pattern="${ENCODER_PATTERN}" />
    23. <Policies>
    24. <TimeBasedTriggeringPolicy />
    25. <SizeBasedTriggeringPolicy size="${LOG_MAX_FILE_SIZE}" />
    26. Policies>
    27. <DefaultRolloverStrategy compressionLevel="9" max="${LOG_TOTAL_NUMBER_DAILY}">
    28. <Delete basePath="${LOG_HOME}" maxDepth="1">
    29. <IfFileName glob="${APP_NAME}.*.ALL.*.log.${ARCHIVE_FILE_SUFFIX}" />
    30. <IfLastModified age="${LOG_MAX_HISTORY}" />
    31. Delete>
    32. DefaultRolloverStrategy>
    33. RollingFile>
    34. <RollingFile name="RollingFileDebug"
    35. fileName="${LOG_FILE_NAME}.DEBUG.log"
    36. filePattern="${FILE_NAME_PATTERN}.DEBUG.%i.log.${ARCHIVE_FILE_SUFFIX}">
    37. <Filters>
    38. <ThresholdFilter level="DEBUG" />
    39. <ThresholdFilter level="INFO" onMatch="DENY"
    40. onMismatch="NEUTRAL" />
    41. Filters>
    42. <PatternLayout pattern="${ENCODER_PATTERN}" />
    43. <Policies>
    44. <TimeBasedTriggeringPolicy />
    45. <SizeBasedTriggeringPolicy size="${LOG_MAX_FILE_SIZE}" />
    46. Policies>
    47. <DefaultRolloverStrategy compressionLevel="9"
    48. max="${LOG_TOTAL_NUMBER_DAILY}">
    49. <Delete basePath="${LOG_HOME}" maxDepth="1">
    50. <IfFileName glob="${APP_NAME}.*.DEBUG.*.log.${ARCHIVE_FILE_SUFFIX}" />
    51. <IfLastModified age="${LOG_MAX_HISTORY}" />
    52. Delete>
    53. DefaultRolloverStrategy>
    54. RollingFile>
    55. <RollingFile name="RollingFileWarn" fileName="${LOG_FILE_NAME}.WARN.log"
    56. filePattern="${FILE_NAME_PATTERN}.WARN.%i.log.${ARCHIVE_FILE_SUFFIX}">
    57. <Filters>
    58. <ThresholdFilter level="WARN" />
    59. <ThresholdFilter level="ERROR" onMatch="DENY"
    60. onMismatch="NEUTRAL" />
    61. Filters>
    62. <PatternLayout pattern="${ENCODER_PATTERN}" />
    63. <Policies>
    64. <TimeBasedTriggeringPolicy />
    65. <SizeBasedTriggeringPolicy size="${LOG_MAX_FILE_SIZE}" />
    66. Policies>
    67. <DefaultRolloverStrategy compressionLevel="9"
    68. max="${LOG_TOTAL_NUMBER_DAILY}">
    69. <Delete basePath="${LOG_HOME}" maxDepth="1">
    70. <IfFileName glob="${APP_NAME}.*.WARN.*.log.${ARCHIVE_FILE_SUFFIX}" />
    71. <IfLastModified age="${LOG_MAX_HISTORY}" />
    72. Delete>
    73. DefaultRolloverStrategy>
    74. RollingFile>
    75. <RollingFile name="RollingFileError"
    76. fileName="${LOG_FILE_NAME}.ERROR.log"
    77. filePattern="${FILE_NAME_PATTERN}.ERROR.%i.log.${ARCHIVE_FILE_SUFFIX}">
    78. <Filters>
    79. <ThresholdFilter level="ERROR" />
    80. Filters>
    81. <PatternLayout pattern="${ENCODER_PATTERN}" />
    82. <Policies>
    83. <TimeBasedTriggeringPolicy />
    84. <SizeBasedTriggeringPolicy size="${LOG_MAX_FILE_SIZE}" />
    85. Policies>
    86. <DefaultRolloverStrategy compressionLevel="9" max="${LOG_TOTAL_NUMBER_DAILY}">
    87. <Delete basePath="${LOG_HOME}" maxDepth="1">
    88. <IfFileName glob="${APP_NAME}.*.ERROR.*.log.${ARCHIVE_FILE_SUFFIX}" />
    89. <IfLastModified age="${LOG_MAX_HISTORY}" />
    90. Delete>
    91. DefaultRolloverStrategy>
    92. RollingFile>
    93. Appenders>
    94. <Loggers>
    95. <root level="${LOG_LEVEL}">
    96. <appender-ref ref="Console"/>
    97. <appender-ref ref="RollingFileAll"/>
    98. <appender-ref ref="RollingFileDebug"/>
    99. <appender-ref ref="RollingFileWarn"/>
    100. <appender-ref ref="RollingFileError"/>
    101. root>
    102. Loggers>
    103. configuration>

    3. 开启Console彩色打印

    • 彩色打印配置

    IDEA控制台没有打印彩色日志的主要原因在于 Log4j - 2.10 版本以后Log4j2默认关闭了Jansi(一个支持输出ANSI颜色的类库)

    修改jvm参数: -Dlog4j.skipJansi=false

    • 修改前边pom.xml,添加彩色打印依赖
    1. <dependency>
    2. <groupId>org.springframework.bootgroupId>
    3. <artifactId>spring-boot-starter-webartifactId>
    4. <version>${spring-boot.version}version>
    5. <exclusions>
    6. <exclusion>
    7. <groupId>org.springframework.bootgroupId>
    8. <artifactId>spring-boot-starter-loggingartifactId>
    9. exclusion>
    10. exclusions>
    11. dependency>
    12. <dependency>
    13. <groupId>org.springframework.bootgroupId>
    14. <artifactId>spring-boot-starter-log4j2artifactId>
    15. <version>${spring-boot.version}version>
    16. dependency>

    4. application.yml中配置

    1. logging:
    2. config: classpath:log4j2.xml
    3. level:
    4. com.hl.magic.mvc: debug

    5.常见模板中日志格式配置

    • springboot默认的日志格式

    %d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:-} [%15.15t] %-40.40logger{39} : %m%n

    • logback默认的日志格式

    %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n

    • lishuoboy推荐日志格式

    %d{MM-dd HH:mm:ss.SSS} [%5level] %4line %40.40logger{39}.%-30.30method : %m%n

  • 相关阅读:
    leetcode148-Sort List
    web前端面试-- 在 JavaScript 中 bind , apply 和 call 的区别
    第二章 初识Linux Shell
    【网络篇】如何搭建自己的DNS服务器
    P3613 【深基15.例2】寄包柜题解
    Nginx 变量
    ubuntu18安装coova chilli精简
    一块RTX 3090加速训练YOLOv5s,时间减少11个小时,速度提升20%
    Nmap渗透测试指南之Nmap基础学习、Nmap主机发现
    Java 学习和实践笔记(19):this的使用方法
  • 原文地址:https://blog.csdn.net/qq_27706119/article/details/132797014