Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。
使用log4j需要导入log4j-core-xx.jar和log4j-api-xx.jar
log4j1.x版本只需要导入一个jar包,通过一个*.properties 或 *.xml的文件作为主配置文件;
log4j2.x版本都要导入两个jar包,采用*.xml,*.json或者*.jsn文件作为配置文件;
在默认情况下,系统选择配置文件的优先级如下:
- log4j-test.json 或 log4j-test.jsn文件
- log4j2-test.xml
- log4j.json 或 log4j.jsn文件
- log4j2.xml
log4j1.x和log4j2.x两个版本使用有一些区别,下面主要讲解使用log4j2.x
Log4j最新版本是apache-log4j-2.7
Log4j由三个重要的组件构成:
日志级别(Logger):从高到低有FATAL、ERROR、WARN、 INFO、DEBUG、TRACE,分别用来指定这条日志信息的重要程度;
日志信息输出目的地(Appender):日志输出目的地可以是控制台、文件和网络设备等;
日志信息输出格式(Layout):控制了日志信息的显示内容。
1、配置文件
Log4j有默认的配置,日志级别是ERROR,输出到控制台
log4j2.xml(放在src目录下,运行时自动加载)
<?xml version="1.0" encoding="UTF-8"?>
<!-- Configuration节点的属性status,用于设置log4j自身内部运行日志输出(只输出到控制台),可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出 -->
<configuration status="OFF">
<!--定义所有的appender-->
<appenders>
<!--配置输出控制台-->
<Console name="Console" target="SYSTEM_OUT">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
<!--这个都知道是输出日志的格式-->
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</Console>
<!--打印出日志到文件,append属性设置为false,每次运行程序会自动先清空之前的日志-->
<File name="error" fileName="log/error.log" append="false">
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File>
<!--打印出日志到文件,单个日文件大小超过size指定的值,则该日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="RollingFile" fileName="log/app.log" filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
<SizeBasedTriggeringPolicy size="50MB"/>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20. -->
<DefaultRolloverStrategy max="20"/>
</RollingFile>
</appenders>
<!--定义所有logger,appender引入到logger才会生效-->
<loggers>
<!-- 每个logger都有一个日志级别,用来控制日志的输出。未分配级别的logger将自动继承它最近的父logger的日志级别 -->
<!--
additivityz值为true,如果logger也满足root的条件,会出现打印两遍的情况。
-->
<logger name="cn.iborder.test.TestLog4j" level="trace" additivity="false">
<appender-ref ref="Console"/>
<appender-ref ref="error"/>
</logger>
<!--默认root的logger-->
<root level="trace">
<appender-ref ref="Console"/>
</root>
</loggers>
</configuration>
2、测试实例
package cn.iborder.test.page;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Test;
public class TestLog4j {
//通过指定的名字获得logger
private static Logger logger = LogManager.getLogger(TestLog4j.class.getName());
@Test
public void test1() {
logger.trace("trace级别");
logger.debug("debug级别");
logger.info("info级别");
logger.warn("warn级别");
logger.error("error级别");
logger.fatal("fatal级别");
}
}