log4j2的配置以及代码实现
1.log4j2需要的jar包
地址1:http://logging.apache.org/
地址2:http://people.apache.org/~rgoers/log4j2/download.html
1.1 Apache Log4j的Project site
1.2 点击Download
1.3 点击che-log4j-2.13.3-bin.zip,解压即可
2.log4j2的依赖
<log4j.version>2.5</log4j.version>
3.log4j2的前奏须知
log4j 2.x版本不再支持像1.x中的.properties后缀的文件配置方式,2.x版本配置文件
后缀名只能为".xml",".json"或者".jsn"。
配置文件的格式:log4j配置文件可以是xml格式的,也可以是json格式的。
配置文件的位置:log4j2默认会在classpath目录下寻找log4j2.xml、log4j.json、log4j.jsn等名称的文件。
系统选择配置文件的优先级(从先到后)如下:
1 classpath下的名为log4j2-test.json 或者log4j2-test.jsn的文件.
2 classpath下的名为log4j2-test.xml的文件.`
3 classpath下名为log4j2.json 或者log4j2.jsn的文件.
4 classpath下名为log4j2.xml的文件.
注: 我们一般默认使用log4j2.xml进行命名。
如果本地要测试,可以把log4j2-test.xml放到classpath,
正式环境使用log4j2.xml,则在打包部署的时候不要打包log4j2-test.xml即可。
4.log4j2配置文件节点解析
根节点Configuration
1.有两个属性:status和monitorinterval,
1. status用来指定log4j本身的打印日志的级别.
2. monitorinterval用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s.
2.有两个子节点:Appenders和Loggers(表明可以定义多个Appender和Logger).
1. Appenders节点,常见的有三种子节点:Console、RollingFile、File.
1. Console节点用来定义输出到控制台的Appender.
name:指定Appender的名字.
target:SYSTEM_OUT 或 SYSTEM_ERR,一般只设置默认:SYSTEM_OUT.
PatternLayout:输出格式,不设置默认为:%m%n.
2. File节点用来定义输出到指定位置的文件的Appender.
name:指定Appender的名字.
fileName:指定输出日志的目的文件带全路径的文件名.
PatternLayout:输出格式,不设置默认为:%m%n.
append:当为true时,会在之前的日志里面续加内容,而不清空
3. RollingFile节点用来定义超过指定大小自动删除旧的创建新的的Appender.
name:指定Appender的名字.
fileName:指定输出日志的目的文件带全路径的文件名.
filePattern:指定新建日志文件的名称格式.
PatternLayout:输出格式,不设置默认为:%m%n.
Policies:指定滚动日志的策略,就是什么时候进行新建日志文件输出日志.
TimeBasedTriggeringPolicy:Policies子节点,基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1 hour。
modulate=true用来调整时间:比如现在是早上3am,interval是4,那么第一次滚动是在4am,接着是8am,12am...而不是7am.
SizeBasedTriggeringPolicy:Policies子节点,基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小.
DefaultRolloverStrategy:用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max属性)。
2. Loggers节点,常见的有两种:Root和Logger.
1. Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出
level:日志输出级别,共有8个级别,见下面注
AppenderRef:Root的子节点,用来指定该日志输出到哪个Appender.
2. Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。
level:日志输出级别,共有8个级别,见下面注
name:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点.
AppenderRef:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了,
那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"
只在自定义的Appender中进行输出。
注:关于日志level.共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.
1.All:最低等级的,用于打开所有日志记录.
2.Trace:是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出.
3.Debug:指出细粒度信息事件对调试应用程序是非常有帮助的.
4.Info:消息在粗粒度级别上突出强调应用程序的运行过程.
5.Warn:输出警告及warn以下级别的日志.
6.Error:输出错误信息日志.
7.Fatal:输出每个严重的错误事件将会导致应用程序的退出的日志.
8.OFF:最高等级的,用于关闭所有日志记录.
程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。
5.log4j2.xml的代码
6.参数解释
%d{HH:mm:ss.SSS} 表示输出到毫秒的时间
%t 输出当前线程名称
%-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
%logger 输出logger名称,因为Root Logger没有名称,所以没有输出
%msg 日志文本
%n 换行
%F 输出所在的类文件名,如Log4j2Test.java
%L 输出行号
%M 输出所在方法名
%l 输出语句所在的行数, 包括类名、方法名、文件名、行数
7.测试代码
package coms;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class log4j2Test {
public static void main(String[] args) {
Logger log = LogManager.getLogger(log4j2Test.class);
for(int i = 1;i < 10000; i++) {
log.trace("这是测试trace" + i);
log.debug("这是测试debug" + i);
log.info("这是测试info" + i);
log.warn("这是测试warn" + i);
log.error("这是测试error" + i);
log.fatal("这是测试fatal" + i);
log.error("这是测试error" + i);
log.error("这是测试error" + i);
}
}
}
8.测试结果


备注:开始遇到的问题是让日志不被删除,如果不设置DefaultRolloverStrategy的话,是默认为7,即每天只会保留最新的7份日志,
即使不写DefaultRolloverStrategy也会默认,所以想到的方法是,把max值设置得大点,就变相的做到了不删除日志的要求。
查阅的网址:
log4j2邮箱配置进去:https://blog.csdn.net/shiyong1949/article/details/54666992
log4j2日志删除规则:https://www.cnblogs.com/yeyang/p/7944899.html
多个日志版本对比:https://blog.csdn.net/weixin_44761910/article/details/104112489

浙公网安备 33010602011771号