概述
log4j2学习
- 1.前言
- 2.导入log4j的依赖
- 3.Log4j配置
- 4.配置模板
1.前言
众所周知,最近log4j被测出了漏洞,先是log4j2被测出了漏洞,漏洞影响范围为Log4j2.x <= 2.14.1;后来又被测出log4j1.X也有漏洞,范围为整个1.X版本。我们项目中,用的是log4j1.x。所以,结合以上两个漏洞,我们项目中只能把log4j升级到2.X版本,最终确定版本为2.17.2。
2.导入log4j的依赖
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.2</version>
</dependency>
3.Log4j配置
缺省默认配置文件
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
配置文件节点说明
-
根节点Configuration:有 Appenders 和 Loggers 两个子节点。
- status:用来指定log4j本身打印日志的级别,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出。
- monitorinterval:用于指定 log4j 自动重新配置的监测间隔时间,单位是秒(s),最小的间隔时间是5s
-
Appenders 节点
有常见的 Console、RollingFile、File 三种子节点。
- Console:用于定义输出到控制台的 Appender。
- name:指定 Appender 的名字。
- target:
SYSTEM_OUT
或SYSTEM_ERR
,一般只设置默认:SYSTEM_OUT。 - PatternLayout:输出格式,不设置默认为 %m%n。
- File:用于定义输出到指定位置的文件的 Appender。
- name:指定 Appender 的名字。
- fileName:指定输出日志的目的文件带全路径的文件名。
- PatternLayout:输出格式,不设置默认为 %m%n。
- RollingFile:定义指定方式触发新的 Appender。
- name:Appender 名字。
- fileName:输出日志文件的名字(带全路径)。
- filePattern:归档日志文件的文件名模式。
- PatternLayout:输出格式,不设置默认为:%m%n。
- Policies:指定滚动日志的策略。
- TimeBasedTriggeringPolicy:Policies 子节点,基于时间的滚动策略。interval 属性根据日期模式中最具体的时间单位进行翻转的频率,默认为1。
- SizeBasedTriggeringPolicy:Policies 子节点,基于文件大小的滚动策略。size属性用来定义每个日志文件的大小。大小可以以字节为单位指定,后缀为KB,MB或GB,例如20MB。
- DefaultRolloverStrategy:用来指定同一文件夹最多有几个日志文件时开始删除最旧的,创建新的(通过max属性)。
- Console:用于定义输出到控制台的 Appender。
-
Loggers 节点
常见的有 Root 和 Logger 两种节点。
- Root:指定项目的根日志,如果没有单独指定 Logger,那么默认使用该 Root 日志输出。
- level:日志的输出级别,共8个级别,按照从低到高为 All < Trace < Debug < Info < Warn < Error < Fatal < OFF。
- AppenderRef:Root 的子节点,用来指定该日志输出到哪个 Appender。
- Logger:用来单独指定日志的形式。
- level:日志的输出级别,与 Root 一致。
- name:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点。
- AppenderRef:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。
- Root:指定项目的根日志,如果没有单独指定 Logger,那么默认使用该 Root 日志输出。
4.配置模板
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<Properties>
<Property name="App">Spring5</Property>
<Property name="logDir">logs</Property>
<Property name="splitSize">10 MB</Property>
</Properties>
<appenders>
<!-- 输出控制台日志的配置 -->
<Console name="console" target="SYSTEM_OUT">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 输出日志的格式 -->
<!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
<!-- %logger{36} 表示 Logger 名字最长36个字符 -->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
</Console>
<!-- 打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
<RollingFile name="infoLog" fileName="${logDir}/${App}-info.log"
filePattern="${logDir}/${App}-info-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS z} [%thread] %-5level %logger{36} %L %M - %msg%xEx%n"/>
<Policies>
<!--interval属性用来指定多久滚动一次,默认是1, 单位到底是月 天 小时 分钟,根据filePattern配置的日期格式而定,本处的格式为天,则默认为1天-->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<!--按大小分-->
<SizeBasedTriggeringPolicy size="${splitSize}"/>
</Policies>
<!-- 指定每天的最大压缩包个数,默认7个,超过了会覆盖之前的 -->
<DefaultRolloverStrategy max="1000"/>
</RollingFile>
<!-- 存储所有error信息 -->
<RollingFile name="errorLog" fileName="${logDir}/${App}-error.log"
filePattern="${logDir}/${App}-error-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS z} [%thread] %-5level %logger{36} %L %M - %msg%xEx%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="${splitSize}"/>
</Policies>
<Filters>
<!-- 只记录error级别信息 -->
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<DefaultRolloverStrategy max="1000"/>
</RollingFile>
</appenders>
<loggers>
<!-- root logger 配置,全局配置,默认所有的Logger都继承此配置 -->
<!-- AsyncRoot - 异步记录日志 - 需要LMAX Disruptor的支持 -->
<Root level="all">
<AppenderRef ref="infoLog"/>
<AppenderRef ref="errorLog"/>
<AppenderRef ref="console"/>
</Root>
</loggers>
</configuration>
最后
以上就是贪玩画笔为你收集整理的log4j2学习的全部内容,希望文章能够帮你解决log4j2学习所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复