下面介绍3种常用的Appender:ConsoleAppender、FileAppender、RollingFileAppender
4.1 ConsoleAppender
ConsoleAppender将输出写到System.err或System.out。上面测试例子中的Appender均为ConsoleAppender,输出写到了System.out。如果想将输出写到System.err,设置Console标签下的target为SYSTEM_ERR 即可
4.2 FileAppender
FileAppender将输出写到指定文件,在File标签下设置fileName即可。fileName可以是绝对路径的文件也可以是相对路径的文件
写到绝对路径文件
修改src下的log4j2.xml
运行Test01,log将写到E:Test01.log
写到相对路径文件
修改src下的log4j2.xml
运行Test01,log将写到E:projecteclipseTestlogsTest01.log
4.3 RollingFileAppender
RollingFileAppender跟FileAppender的基本用法一样。但RollingFileAppender可以设置log文件的size(单位:KB/MB/GB)上限、数量上限,当log文件超过设置的size上限,会自动被压缩。RollingFileAppender可以理解为滚动输出日志,如果log4j 2记录的日志达到上限,旧的日志将被删除,腾出的空间用于记录新的日志
修改src下的log4j2.xml
该配置设置日志写到Test.Log,如果Test.log的大小超过1KB,log4j 2会将Test.log制成压缩文件(压缩文件的命名格式是由filePattern设置的)。DefaultRolloverStrategy 标签的max设置压缩文件的上限(默认值为7)
将Test01的输出循环50次
package log4j2;
import java.io.FileNotFoundException;
import java.io.InputStream;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.ConfigurationFactory.ConfigurationSource;
import org.apache.logging.log4j.core.config.XMLConfigurationFactory;
public class Test01 {
public static void main(String[] args) throws FileNotFoundException {
Logger logger = LogManager.getLogger(Test01.class.getName());
for (int i = 0; i < 50; i++) {
logger.trace(trace);
logger.debug(debug);
logger.info(info);
logger.warn(warn);
logger.error(error);
logger.fatal(fatal);
}
}
} 运行Test01
可以在E:projecteclipseTestlogs 4-02看到如下压缩文件

5. Filters
Filter可以过滤log事件,并控制log输出
log4j 2定义了10种 Filter:http://logging.apache.org/log4j/2.x/manual/filters.html
下面介绍一下BurstFilter的用法
BurstFilter可以控制某一级别的log的并发情况
修改src下的log4j2.xml
level:BurstFilter过滤的事件级别
rate:每秒允许的log事件的平均值
maxBurst:当BurstFilter过滤的事件超过rate值,排队的log事件上限。超过此上限的log,将被丢弃。默认情况下maxBurst = 10*rate
按以上配置,假定每个log事件的执行时间较长,输出117个log事件(INFO级别)到RollingFileAppenders,BurstFilter会过滤得到INFO级别的log事件,之后会发生:16个log事件在执行,100个等待执行,1个被丢弃。
6. log4j 2指定某个类的log输出级别
在log4j2.xml设置Test01的输出级别
修改src下的log4j2.xml
修改Test01
package log4j2;
import java.io.FileNotFoundException;
import java.io.InputStream;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.ConfigurationFactory.ConfigurationSource;
import org.apache.logging.log4j.core.config.XMLConfigurationFactory;
public class Test01 {
public static void main(String[] args) throws FileNotFoundException {
Logger logger = LogManager.getLogger(Test01.class.getName());
logger.trace(trace);
logger.debug(debug);
logger.info(info);
logger.warn(warn);
logger.error(error);
logger.fatal(fatal);
}
}
运行Test01
Output:
16:12:08.662 [main] TRACE log4j2.Test01 - trace 16:12:08.662 [main] TRACE log4j2.Test01 - trace 16:12:08.665 [main] DEBUG log4j2.