最近项目上有使用到log4j2日志模板配置,本文简单总结一下之前的学习笔记,如有纰漏之处,请批评指正。
使用log4j2日志模板时,需要引入相关依赖,下边的两种依赖方式均可。
- <properties>
- <spring-boot.version>2.6.13spring-boot.version>
- <log4j2.version>2.18.0log4j2.version>
- properties>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- <version>${spring-boot.version}version>
- dependency>
-
-
- <dependency>
- <groupId>org.slf4jgroupId>
- <artifactId>slf4j-apiartifactId>
- <version>1.7.30version>
- dependency>
- <dependency>
- <groupId>org.apache.logging.log4jgroupId>
- <artifactId>log4j-coreartifactId>
- <version>${log4j2.version}version>
- dependency>
- <dependency>
- <groupId>org.apache.logging.log4jgroupId>
- <artifactId>log4j-apiartifactId>
- <version>${log4j2.version}version>
- dependency>
- <dependency>
- <groupId>org.apache.logging.log4jgroupId>
- <artifactId>log4j-slf4j-implartifactId>
- <version>${log4j2.version}version>
- <exclusions>
- <exclusion>
- <groupId>org.slf4jgroupId>
- <artifactId>slf4j-apiartifactId>
- exclusion>
- exclusions>
- dependency>
-
-
- private static final Logger LOGGER = LoggerFactory.getLogger(xxxxxx.class);
-
- // 方法内
- LOGGER .info("application started");
这种方式需要配置很多次,略繁琐。可以类上使用注解@sl4j来代替
如果不想像上边那样写一堆sl4f依赖,可以直接使用lombok依赖,作用是相同的。仅仅在需要打印日志的类上配置上注解@sl4j即可。
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- <version>1.18.24version>
- dependency>
- // 方法内
- log.info("application started");
上边两种配置方式,原理雷同,看实际项目需要和个人喜好使用即可。
- "1.0" encoding="UTF-8"?>
- <configuration status="OFF">
-
- <properties>
-
- <property name="LOG_LEVEL">INFOproperty>
-
- <property name="APP_NAME" value="spring-mvc-log"/>
-
- <property name="LOG_HOME">./logsproperty>
-
- <property name="LOG_MAX_HISTORY" value="10d"/>
-
- <property name="LOG_MAX_FILE_SIZE" value="10 MB"/>
-
- <property name="LOG_TOTAL_NUMBER_DAILY" value="10"/>
-
- <property name="ARCHIVE_FILE_SUFFIX" value="zip"/>
-
- <property name="LOG_FILE_NAME" value="${LOG_HOME}/${APP_NAME}"/>
- <property name="FILE_NAME_PATTERN" value="${LOG_HOME}/${APP_NAME}.%d{yyyy-MM-dd}"/>
-
-
-
- <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>
-
- <property name="ENCODER_PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} | %-5level | %t | %c{1.} >>>>> %msg%nproperty>
- properties>
-
- <Appenders>
-
- <Console name="Console" target="SYSTEM_OUT">
-
- <PatternLayout pattern="${ENCODER_PATTERN_CONSOLE}" />
- Console>
-
- <RollingFile name="RollingFileAll" fileName="${LOG_FILE_NAME}.ALL.log" filePattern="${FILE_NAME_PATTERN}.ALL.%i.log.${ARCHIVE_FILE_SUFFIX}">
-
- <ThresholdFilter level="${LOG_LEVEL}" onMatch="ACCEPT" onMismatch="DENY" />
-
- <PatternLayout pattern="${ENCODER_PATTERN}" />
- <Policies>
-
- <TimeBasedTriggeringPolicy />
-
- <SizeBasedTriggeringPolicy size="${LOG_MAX_FILE_SIZE}" />
- Policies>
-
- <DefaultRolloverStrategy compressionLevel="9" max="${LOG_TOTAL_NUMBER_DAILY}">
- <Delete basePath="${LOG_HOME}" maxDepth="1">
- <IfFileName glob="${APP_NAME}.*.ALL.*.log.${ARCHIVE_FILE_SUFFIX}" />
- <IfLastModified age="${LOG_MAX_HISTORY}" />
- Delete>
- DefaultRolloverStrategy>
- RollingFile>
-
- <RollingFile name="RollingFileDebug"
- fileName="${LOG_FILE_NAME}.DEBUG.log"
- filePattern="${FILE_NAME_PATTERN}.DEBUG.%i.log.${ARCHIVE_FILE_SUFFIX}">
- <Filters>
- <ThresholdFilter level="DEBUG" />
- <ThresholdFilter level="INFO" onMatch="DENY"
- onMismatch="NEUTRAL" />
- Filters>
- <PatternLayout pattern="${ENCODER_PATTERN}" />
- <Policies>
-
- <TimeBasedTriggeringPolicy />
-
- <SizeBasedTriggeringPolicy size="${LOG_MAX_FILE_SIZE}" />
- Policies>
-
- <DefaultRolloverStrategy compressionLevel="9"
- max="${LOG_TOTAL_NUMBER_DAILY}">
- <Delete basePath="${LOG_HOME}" maxDepth="1">
- <IfFileName glob="${APP_NAME}.*.DEBUG.*.log.${ARCHIVE_FILE_SUFFIX}" />
- <IfLastModified age="${LOG_MAX_HISTORY}" />
- Delete>
- DefaultRolloverStrategy>
- RollingFile>
-
- <RollingFile name="RollingFileWarn" fileName="${LOG_FILE_NAME}.WARN.log"
- filePattern="${FILE_NAME_PATTERN}.WARN.%i.log.${ARCHIVE_FILE_SUFFIX}">
- <Filters>
- <ThresholdFilter level="WARN" />
- <ThresholdFilter level="ERROR" onMatch="DENY"
- onMismatch="NEUTRAL" />
- Filters>
- <PatternLayout pattern="${ENCODER_PATTERN}" />
- <Policies>
-
- <TimeBasedTriggeringPolicy />
-
- <SizeBasedTriggeringPolicy size="${LOG_MAX_FILE_SIZE}" />
- Policies>
-
- <DefaultRolloverStrategy compressionLevel="9"
- max="${LOG_TOTAL_NUMBER_DAILY}">
- <Delete basePath="${LOG_HOME}" maxDepth="1">
- <IfFileName glob="${APP_NAME}.*.WARN.*.log.${ARCHIVE_FILE_SUFFIX}" />
- <IfLastModified age="${LOG_MAX_HISTORY}" />
- Delete>
- DefaultRolloverStrategy>
- RollingFile>
-
- <RollingFile name="RollingFileError"
- fileName="${LOG_FILE_NAME}.ERROR.log"
- filePattern="${FILE_NAME_PATTERN}.ERROR.%i.log.${ARCHIVE_FILE_SUFFIX}">
- <Filters>
- <ThresholdFilter level="ERROR" />
- Filters>
- <PatternLayout pattern="${ENCODER_PATTERN}" />
- <Policies>
- <TimeBasedTriggeringPolicy />
- <SizeBasedTriggeringPolicy size="${LOG_MAX_FILE_SIZE}" />
- Policies>
- <DefaultRolloverStrategy compressionLevel="9" max="${LOG_TOTAL_NUMBER_DAILY}">
- <Delete basePath="${LOG_HOME}" maxDepth="1">
- <IfFileName glob="${APP_NAME}.*.ERROR.*.log.${ARCHIVE_FILE_SUFFIX}" />
- <IfLastModified age="${LOG_MAX_HISTORY}" />
- Delete>
- DefaultRolloverStrategy>
- RollingFile>
- Appenders>
-
-
- <Loggers>
- <root level="${LOG_LEVEL}">
- <appender-ref ref="Console"/>
- <appender-ref ref="RollingFileAll"/>
- <appender-ref ref="RollingFileDebug"/>
- <appender-ref ref="RollingFileWarn"/>
- <appender-ref ref="RollingFileError"/>
- root>
- Loggers>
- configuration>

IDEA控制台没有打印彩色日志的主要原因在于 Log4j - 2.10 版本以后Log4j2默认关闭了Jansi(一个支持输出ANSI颜色的类库)
修改jvm参数: -Dlog4j.skipJansi=false
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- <version>${spring-boot.version}version>
- <exclusions>
- <exclusion>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-loggingartifactId>
- exclusion>
- exclusions>
- dependency>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-log4j2artifactId>
- <version>${spring-boot.version}version>
- dependency>
- logging:
- config: classpath:log4j2.xml
- level:
- com.hl.magic.mvc: debug
%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:-} [%15.15t] %-40.40logger{39} : %m%n
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
%d{MM-dd HH:mm:ss.SSS} [%5level] %4line %40.40logger{39}.%-30.30method : %m%n