1. Log4j2优点
参考官方文档:https://logging.apache.org/log4j/2.x/
相比与其他的日志系统,log4j2丢数据的情况少;在多线程环境下,性能高于logback等10倍以上;利用jdk1.5并发的特性,减少了死锁的发生。
2. Log4j2日志级别
2.1 级别
在log4j2中, 共有8个级别,按照从低到高为:
ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF。
- All:最低等级的,用于打开所有日志记录。
- Trace:是追踪,就是程序推进一下。
- Debug:指出细粒度信息事件对调试应用程序是非常有帮助的。
- Info:消息在粗粒度级别上突出强调应用程序的运行过程。
- Warn:输出警告及warn以下级别的日志。
- Error:输出错误信息日志。
- Fatal:输出每个严重的错误事件将会导致应用程序的退出的日志。
- OFF:最高等级的,用于关闭所有日志记录。
程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少 。
2.2 视图
通过视图可以看到:
- 左边竖栏是Event Level,右边横栏是LoggerConfig Level。
- YES的意思就是这个event可以通过filter,NO的意思就是不能通过filter。
- 可以看到,INFO级别在Event是无法被ERROR级别的LoggerConfig的filter接受的,所以,INFO信息不回被输出。
3. SpringBoot整合Log4j2配置
<!-- 排除 Spring-boot-starter 默认的日志配置 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <!-- 配置 log4j2 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <!-- 加上这个才能辨认到log4j2.yml文件 --> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> </dependency>
4. log4j2.yml配置
- application.yml 引入log4j2.yml
# log4j2 日志配置 logging: config: classpath:log4j2.yml
- log4j2.yml配置
Configuration: status: WARN name: YAMLConfigTest properties: property: name: project.name value: vhr thresholdFilter: level: debug appenders: #只接受程序中DEBUG级别的日志进行处理 Console: name: Console target: SYSTEM_OUT ThresholdFilter: level: DEBUG onMatch: ACCEPT onMismatch: DENY PatternLayout: Pattern: "[%d{HH:mm:ss.SSS}] %-5level %class{36} %L %M - %msg%xEx%n" #处理DEBUG级别的日志,并把该日志放到logs/debug.log文件中 RollingFile: #打印出DEBUG级别日志,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 - name: RollingFileDebug fileName: ./logs/${project.name}/debug.log filePattern: "logs/${project.name}/$${date:yyyy-MM}/debug-%d{yyyy-MM-dd}-%i.log.gz" PatternLayout: Pattern: "[%d{yyyy-MM-dd HH:mm:ss}] %-5level %class{36} %L %M - %msg%xEx%n" Filters: ThresholdFilter: - level: DEBUG - level: INFO onMatch: DENY onMismatch: NEUTRAL Policies: TimeBasedTriggeringPolicy: # 按天分类 modulate: true interval: 1 DefaultRolloverStrategy: # 文件最多100个 max: 100 #处理INFO级别的日志,并把该日志放到logs/info.log文件中 - name: RollingFileInfo fileName: ./logs/${project.name}/info.log filePattern: "logs/${project.name}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz" PatternLayout: Pattern: "[%d{yyyy-MM-dd HH:mm:ss}] %-5level %class{36} %L %M - %msg%xEx%n" Filters: #只接受INFO级别的日志,其余的全部拒绝处理 ThresholdFilter: - level: INFO - level: WARN onMatch: DENY onMismatch: NEUTRAL Policies: TimeBasedTriggeringPolicy: # 按天分类 modulate: true interval: 1 DefaultRolloverStrategy: # 文件最多100个 max: 100 #处理WARN级别的日志,并把该日志放到logs/warn.log文件中 - name: RollingFileWarn fileName: ./logs/${project.name}/warn.log filePattern: "logs/${project.name}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz" PatternLayout: Pattern: "[%d{yyyy-MM-dd HH:mm:ss}] %-5level %class{36} %L %M - %msg%xEx%n" Filters: ThresholdFilter: - level: WARN - level: ERROR onMatch: DENY onMismatch: NEUTRAL Policies: TimeBasedTriggeringPolicy: # 按天分类 modulate: true interval: 1 DefaultRolloverStrategy: # 文件最多100个 max: 100 #处理error级别的日志,并把该日志放到logs/error.log文件中 - name: RollingFileError fileName: ./logs/${project.name}/error.log filePattern: "logs/${project.name}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz" PatternLayout: Pattern: "[%d{yyyy-MM-dd HH:mm:ss}] %-5level %class{36} %L %M - %msg%xEx%n" ThresholdFilter: level: ERROR Policies: TimeBasedTriggeringPolicy: # 按天分类 modulate: true interval: 1 DefaultRolloverStrategy: # 文件最多100个 max: 100 #druid的日志记录追加器 - name: druidSqlRollingFile fileName: ./logs/${project.name}/druid-sql.log filePattern: "logs/${project.name}/$${date:yyyy-MM}/druid-sql-%d{yyyy-MM-dd}-%i.log.gz" PatternLayout: Pattern: "[%d{yyyy-MM-dd HH:mm:ss}] %-5level %L %M - %msg%xEx%n" Policies: TimeBasedTriggeringPolicy: # 按天分类 modulate: true interval: 1 DefaultRolloverStrategy: # 文件最多100个 max: 100 loggers: logger: #记录druid-sql的记录 name: druid.sql.Statement level: debug additivity: false appender-ref: ref: druidSqlRollingFile #log4j2 自带过滤日志 Logger: - name: org.apache.catalina.startup.DigesterFactory level: error - name: org.apache.catalina.util.LifecycleBase level: error - name: org.apache.coyote.http11.Http11NioProtocol level: warn - name: org.apache.sshd.common.util.SecurityUtils level: warn - name: org.apache.tomcat.util.net.NioSelectorPool level: warn - name: org.crsh.plugin level: warn - name: org.crsh.ssh level: warn - name: org.eclipse.jetty.util.component.AbstractLifeCycle level: error - name: org.hibernate.validator.internal.util.Version level: warn - name: org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration level: warn - name: org.springframework.boot.actuate.endpoint.jmx level: warn - name: org.thymeleaf level: warn root: level: INFO appender-ref: - ref: Console - ref: RollingFileInfo - ref: RollingFileWarn - ref: RollingFileError - ref: RollingFileDebug
实操可行,欢迎点赞、收藏、关注。技术交流➕企鹅:995062855(同vx,注明来意)。